C++(Qt)软件调试---学会使用AeDebug(7) 原创

C++(Qt)软件调试—学会使用AeDebug(7)

更多精彩内容
👉个人内容分类汇总 👈
👉C++软件调试、异常定位 👈

1、前言

1.1 AeDebug是什么

AeDebug是Windows操作系统自带的一个调试工具,用于帮助开发人员进行应用程序的调试和错误定位。

当应用程序发生异常或崩溃时,AeDebug可以自动启动调试器,并为开发人员提供相关的错误信息和调试信息,以帮助开发人员快速定位和解决问题。

在Windows操作系统中,可以使用注册表编辑器来修改AeDebug的设置

AeDebug通常用于以下方面:

  1. 调试应用程序:AeDebug可以帮助开发人员快速定位应用程序的错误和问题,并进行调试和修复。
  2. 分析应用程序崩溃:AeDebug可以捕获应用程序的崩溃信息,并为开发人员提供相关的调试信息和错误信息,以帮助开发人员分析崩溃原因。
  3. 跟踪应用程序运行:AeDebug可以帮助开发人员跟踪应用程序的运行状态,并记录相关的调试信息和错误信息。

总之,AeDebug是一个非常有用的调试工具,可以帮助开发人员快速定位和解决应用程序的错误和问题。

如果您是Windows应用程序的开发人员,建议您掌握AeDebug工具的使用方法,以便更好地进行应用程序的调试和错误定位。

1.2 为什么要用AeDebug

下面是使用AeDebug的一些原因:

  1. 快速定位问题:AeDebug可以捕获程序运行时发生的异常和崩溃信息,并生成相应的日志文件,帮助开发人员快速定位问题。
  2. 提供详细的调试信息:AeDebug能够提供详细的调试信息,包括堆栈跟踪、内存分配和释放记录等,帮助开发人员分析和解决问题。
  3. 与第三方调试工具集成:AeDebug可以与第三方调试工具集成,如ProcDump、DrMinGW、Windbg或Visual Studio,提供更强大的调试功能,使得开发人员能够更快速地定位和解决问题。
  4. 支持自定义处理程序: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注册表

  1. 打开AeDebug注册表,你可以直接复制本文中的注册表路径,也可以在打开注册表编辑器后点击【编辑】->【查找】->输入【AeDebug】->勾选【项】->点击【查找下一个】。

在这里插入图片描述

  1. 找到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 使用示例

  1. 可以通过将Windbg、procdump或者其它调试工具设置到AeDebug作为系统默认调试工具,在程序运行出现异常时快速捕获到异常信息,用于帮助开发人员进行应用程序的调试和错误定位。(有的调试工具默认已经内置了安装到AeDebug的功能,必须自己手动修改注册表),这里使用Windbg来演示。

  2. 使用Everything查看Windbg路径,我选择64位的;

    在这里插入图片描述

  3. 进入注册表计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug

  4. 鼠标选中AeDebug文件夹,点击【导出】,将未修改的注册表保存下来;

  5. 将Auto设置为1,Debugger设置为"C:\Program Files\Windows Kits\10\Debuggers\x64\windbg.exe" -p %ld -e %ld -g

  6. 如下图所示;

    在这里插入图片描述

  7. 注意设置完了后不会生效,想要让修改后的注册表生效有两种办法;

    1. 方法一:重启系统;
    2. 方法二:鼠标选中AeDebug文件夹,点击【导出】,然后再点击窗口左上角【文件】选择导入修改后的注册表,然后就生效了;
  8. 演示结果如下:设置完成Windbg后,当程序崩溃会系统自动调用Windbg定位到异常代码位置(MSVC64 debug编译的代码),如果编译器不是MSVC、使用Release、或者是MSVC32的不一定能定位到,需要修改配置;

    在这里插入图片描述

  9. 如果不想使用了就可以直接将最开始保存的注册表null.reg导入,程序崩溃时就直接退出,不会调用windbg了。

    在这里插入图片描述

posted @ 2023-11-08 22:50  mahuifa  阅读(0)  评论(0编辑  收藏  举报  来源