C++(Qt)软件调试---使用drmingw进行调试(10) 原创
C++(Qt)软件调试—使用drmingw进行调试(10)
文章目录
更多精彩内容 |
---|
👉个人内容分类汇总 👈 |
👉C++软件调试、异常定位 👈 |
👉PDF版下载 👈 |
1、前言
1.1 DrMinGW是什么
Dr.MinGW是一个实时(JIT)调试器,使用命令行运行。
当应用程序抛出未经处理的异常时,Dr.MinGW会将自己连接到应用程序,并使用可用的调试信息收集有关异常的信息。
Dr.MinGW可以读取由GUN C/C++编译器(Linux 下GCC、Windows下MinGW)生成的DWARF格式的调试信息,以及由Microsoft Visual C++编译器生成的PDB文件中的调试信息。它依赖于DbgHelp库来解析由Microsoft工具编译的模块中的符号。
解析符号和转储堆栈回溯的功能是以DLL的形式提供的,因此它可以嵌入到您的应用程序/工具中。
2、下载地址
3、使用效果演示
- 如下图所示,在可执行程序异常退出时Dr.MinGW自动启动捕获程序异常,定位到程序程序异常的位置。
3、命令行选项
- 下表介绍了Dr.Mingw命令行选项。所有命令行选项都区分大小写。
缩写 | 完整选项 | 功能说明 |
---|---|---|
-h | –help | 打印帮助并退出 |
-V | –version | 打印版本并退出 |
-i | –install | 安装到AeDebug,作为默认 JIT 调试器(drmingw作用于所有程序) |
-u | –uninstall | 卸载 |
-p pid | –process-id=pid | 通过进程的PID编号将DrMingw附加到进程(drmingw作用于单个程序) |
-e event | –event=event | 附加进程后发出事件信号 |
-b | –breakpoints | 将断点视为异常 |
-v | –verbose | 调试时输出详细信息 |
4、使用示例
1.1 通过pid附加到进程
-
运行一个可执行程序,打开任务管理器;
-
找到刚才运行的程序,右键转到详细信息;
-
打开一个命令行窗口,查看任务管理器中选中的进程的PID号,使用下列命令将drmingw附加到进程;
drmingw -p 8132
-
回车后会弹出一个Dr.MinGW的窗口,但里面什么都没有;
-
当附加的程序出现异常退出时,就会在drmingw窗口中显示调试信息,定位异常位置(需要是附带调试信息的程序,如果是release的就可能无法定位)。
1.2 安装为默认JIT调试器
-
以管理员身份打开一个命令行窗口;
-
输入下列命令,将drmingw注册到AeDebug,作用默认的JIT调试器;
drmingw -i # 显示简单信息 drmingw -i -v # 显示详细信息
-
只要有进程出现异常退出就会触发drmingw,弹出一个窗口,显示调试信息;
-
当不需要使用drmingw调试时可以使用下列命令卸载安装;
drmingw -u
-
注意:如果AeDebug中已经注册了其它调试工具,例如WinDbg、procdump等,在安装drmingw时会把之前的覆盖。
5、总结
- drmingw是一个使用非常简单的调试工具,没有GDB、Windbg这些工具的复杂命令;
- 可以支持调试MinGW、MSVC编译的程序;
- 在重新退出时可以非常快速的显示调试结果,定位异常位置;
- 但是使用简单就意味着对于一些复杂的bug调试可能就不那么好用了,但是还是值得一用。
- drmingw还有一些其它用法,可以看github仓库里面的说明。