C++(Qt)软件调试---学会使用AeDebug(7) 原创
C++(Qt)软件调试—学会使用AeDebug(7)
文章目录
更多精彩内容 |
---|
👉个人内容分类汇总 👈 |
👉C++软件调试、异常定位 👈 |
1、前言
1.1 AeDebug是什么
AeDebug是Windows操作系统自带的一个调试工具,用于帮助开发人员进行应用程序的调试和错误定位。
当应用程序发生异常或崩溃时,AeDebug可以自动启动调试器,并为开发人员提供相关的错误信息和调试信息,以帮助开发人员快速定位和解决问题。
在Windows操作系统中,可以使用注册表编辑器来修改AeDebug的设置
AeDebug通常用于以下方面:
- 调试应用程序:AeDebug可以帮助开发人员快速定位应用程序的错误和问题,并进行调试和修复。
- 分析应用程序崩溃:AeDebug可以捕获应用程序的崩溃信息,并为开发人员提供相关的调试信息和错误信息,以帮助开发人员分析崩溃原因。
- 跟踪应用程序运行:AeDebug可以帮助开发人员跟踪应用程序的运行状态,并记录相关的调试信息和错误信息。
总之,AeDebug是一个非常有用的调试工具,可以帮助开发人员快速定位和解决应用程序的错误和问题。
如果您是Windows应用程序的开发人员,建议您掌握AeDebug工具的使用方法,以便更好地进行应用程序的调试和错误定位。
1.2 为什么要用AeDebug
下面是使用AeDebug的一些原因:
- 快速定位问题:AeDebug可以捕获程序运行时发生的异常和崩溃信息,并生成相应的日志文件,帮助开发人员快速定位问题。
- 提供详细的调试信息:AeDebug能够提供详细的调试信息,包括堆栈跟踪、内存分配和释放记录等,帮助开发人员分析和解决问题。
- 与第三方调试工具集成:AeDebug可以与第三方调试工具集成,如ProcDump、DrMinGW、Windbg或Visual Studio,提供更强大的调试功能,使得开发人员能够更快速地定位和解决问题。
- 支持自定义处理程序:AeDebug还支持自定义处理程序,开发人员可以编写自己的处理程序来处理特定的错误信息,提高调试效率。
2、为什么注册表中有两个AeDebug
在Windows注册表中,可能会出现两个AeDebug键值的情况:
- 一个位于
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
- 另一个位于
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
。这是因为在64位Windows系统中,32位应用程序的注册表信息存储在Wow6432Node\节点下,而64位应用程序的注册表信息存储在根节点下。
如果您需要修改AeDebug键值,应根据您要修改的应用程序的位数,选择对应的注册表项进行修改。
如果您使用的是32位应用程序,应修改
Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
下的键值;如果使用的是64位应用程序,应修改
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
下的键值。需要注意的是,在修改注册表时一定要谨慎,因为错误的修改可能会导致系统出现问题。在修改之前,建议先备份注册表,以便出现问题时可以恢复到原始状态。
3、AeDebug用法
1.1 打开AeDebug注册表
- 打开AeDebug注册表,你可以直接复制本文中的注册表路径,也可以在打开注册表编辑器后点击【编辑】->【查找】->输入【AeDebug】->勾选【项】->点击【查找下一个】。
- 找到AeDebug的注册表后如同所示
1.2 AeDebug注册表项
常用的选项包括:
-
Auto:用于设置启用/禁用AeDebug自动调试功能。
- 如果Auto不存在空白处鼠标右键创建一个,类型为字符串(REG_SZ);
- 值为1表示启用自动调试;
- 值为0表示禁用自动调试。
-
Debugger:用于指定调试器的路径和参数。
-
如果Debugger不存在空白处鼠标右键创建一个,类型为字符串(REG_SZ);
-
例如,如果要使用WinDbg进行调试,则可以输入以下内容:
"C:\Program Files\Windows Kits\10\Debuggers\x64\windbg.exe" -p %ld -e %ld -g
-
其中,%ld表示进程ID,-p参数指定进程ID,-e参数指定异常代码,-g参数指示WinDbg在断点处停止执行;
-
如果要使用其他调试器,请将Debugger键的值设置为相应的调试器路径和参数。
-
注意:在输入调试器路径和参数时,请务必确保路径和参数正确。如果路径或参数错误,将导致aeDebug无法启动调试器。
-
-
UserDebuggerHotKey:用于配置用户快捷键,以便在应用程序崩溃时启动调试器。(没验证成功)
- 如果UserDebuggerHotKey不存在空白处鼠标右键创建一个,类型为DWORD(32位);
- 如果要禁用用户快捷键,请将UserDebuggerHotKey键的值设置为0;
- 输入一个热键组合,例如:0x13(表示Ctrl+S)。您可以根据需要选择任何可用的热键组合。
- 例如:0x10表示Ctrl+Alt+Break。
1.3 使用示例
-
可以通过将Windbg、procdump或者其它调试工具设置到AeDebug作为系统默认调试工具,在程序运行出现异常时快速捕获到异常信息,用于帮助开发人员进行应用程序的调试和错误定位。(有的调试工具默认已经内置了安装到AeDebug的功能,必须自己手动修改注册表),这里使用Windbg来演示。
-
使用Everything查看Windbg路径,我选择64位的;
- 如果没有则看这里下载安装方法,但是这里面的下载链接失效了,可以看下面的链接;
- Windows SDK下载
-
进入注册表
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
; -
鼠标选中AeDebug文件夹,点击【导出】,将未修改的注册表保存下来;
-
将Auto设置为1,Debugger设置为
"C:\Program Files\Windows Kits\10\Debuggers\x64\windbg.exe" -p %ld -e %ld -g
; -
如下图所示;
-
注意设置完了后不会生效,想要让修改后的注册表生效有两种办法;
- 方法一:重启系统;
- 方法二:鼠标选中AeDebug文件夹,点击【导出】,然后再点击窗口左上角【文件】选择导入修改后的注册表,然后就生效了;
-
演示结果如下:设置完成Windbg后,当程序崩溃会系统自动调用Windbg定位到异常代码位置(MSVC64 debug编译的代码),如果编译器不是MSVC、使用Release、或者是MSVC32的不一定能定位到,需要修改配置;
-
如果不想使用了就可以直接将最开始保存的注册表null.reg导入,程序崩溃时就直接退出,不会调用windbg了。