qt creator利用dmp文件定位程序崩溃代码位置

本文介绍了在大型工程中,由于代码量大、多人协作导致的程序崩溃问题,以及如何通过Windows的DMP文件来快速定位错误。通过在QT项目的pro文件和main.c文件中添加特定配置,可以生成qtdmp文件。当程序崩溃时,DMP文件将被创建。然后,使用Visual Studio分析DMP文件,设置正确的pdb文件路径,可以高效地调试和修复问题。
摘要由CSDN通过智能技术生成

一个庞大的工程往往代码量很大,放在不同电脑上运行,有崩溃的现象发生,但查找起来很麻烦,所以利用windows的dmp文件定位程序崩溃的地方,能快速解决问题。本人用qt开发伺服驱动器上位机,别人用着崩溃了,但又是多人合作开发,谁都不知道是谁的代码错了,唯有定位错误才能解决了,所以亲身经历,总结一下。

一、首先qt dmp文件的生成

1、在pro文件里添加

QMAKE_CFLAGS_RELEASE = -O2 -MD -Zi
QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO /DEBUG
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO

2、在main.c文件里添加一个函数

//程式异常捕获
LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException)
{
    //创建 Dump 文件,可选路径
    HANDLE hDumpFile = CreateFile(L"crash.dmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hDumpFile != INVALID_HANDLE_VALUE)
    {
    //Dump信息
    	MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
    	dumpInfo.ExceptionPointers = pException;
    	dumpInfo.ThreadId = GetCurrentThreadId();
    	dumpInfo.ClientPointers = FALSE;
    //写入Dump文件内容
    	MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL);
    }
    return EXCEPTION_EXECUTE_HANDLER;
}

然后在主函数里注册下。

SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler);//注冊异常捕获函数

那么这个程序崩溃就能生成dmp文件了。
可以以下代码测试下。

QLabel* lb;
lb->setText("hello world");

二、dmp文件的分析

一种是用WinDbg软件,一种是Vs软件,个人觉得vs软件分析简便写,所以这里我就只分析vs软件如何解析dmp文件了。
1、首先用VS软件打开dmp文件。
在这里插入图片描述
2、点击右上角的设置符号路径。
在这里插入图片描述
主要是配置pdb文件的路径。
这里需要3类的符号路径。
1是系统的pdb文件。如果第一次使用,勾选符号服务器,然后设定在此目录下缓存符号。第一次下载比较漫长,要等待很久。第二次及以后使用的话,就取消勾选符号路径,把缓存符号的路径加上去就可以了。这样就不用下载了。
2是qt工程生成的pdb文件。编译器会生成一个pdb文件,一般跟exe文件同目录下,如果你把这个exe发给别人,记得保存好这个pdb文件,不然没办法准确定位出代码。
3是qt源代码的pdb文件。这个需要去官网下载自己对应的qt版本的pdb文件。

3、设置好pdb文件路径,点击使用仅限本机进行调试,你会发现一片新天地。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值