C++(Qt)软件调试---使用drmingw进行调试(10)

C++(Qt)软件调试—使用drmingw进行调试(10)

文章目录

  • C++(Qt)软件调试---使用drmingw进行调试(10)
    • 1、前言
      • 1.1 DrMinGW是什么
    • 2、下载地址
    • 3、使用效果演示
    • 3、命令行选项
    • 4、使用示例
      • 1.1 通过pid附加到进程
      • 1.2 安装为默认JIT调试器
    • 5、总结

更多精彩内容
👉个人内容分类汇总 👈
👉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附加到进程

  1. 运行一个可执行程序,打开任务管理器;

  2. 找到刚才运行的程序,右键转到详细信息;

    在这里插入图片描述

  3. 打开一个命令行窗口,查看任务管理器中选中的进程的PID号,使用下列命令将drmingw附加到进程;

    drmingw -p 8132
    

    在这里插入图片描述

  4. 回车后会弹出一个Dr.MinGW的窗口,但里面什么都没有;

  5. 当附加的程序出现异常退出时,就会在drmingw窗口中显示调试信息,定位异常位置(需要是附带调试信息的程序,如果是release的就可能无法定位)。

    在这里插入图片描述

1.2 安装为默认JIT调试器

  1. 管理员身份打开一个命令行窗口;

    在这里插入图片描述

  2. 输入下列命令,将drmingw注册到AeDebug,作用默认的JIT调试器;

    drmingw -i          # 显示简单信息
    drmingw -i -v       # 显示详细信息
    

    在这里插入图片描述

  3. 只要有进程出现异常退出就会触发drmingw,弹出一个窗口,显示调试信息;

  4. 当不需要使用drmingw调试时可以使用下列命令卸载安装;

    drmingw -u
    
  5. 注意:如果AeDebug中已经注册了其它调试工具,例如WinDbg、procdump等,在安装drmingw时会把之前的覆盖。

5、总结

  • drmingw是一个使用非常简单的调试工具,没有GDB、Windbg这些工具的复杂命令;
  • 可以支持调试MinGW、MSVC编译的程序;
  • 在重新退出时可以非常快速的显示调试结果,定位异常位置;
  • 但是使用简单就意味着对于一些复杂的bug调试可能就不那么好用了,但是还是值得一用。
  • drmingw还有一些其它用法,可以看github仓库里面的说明。
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: Dev-C++ 中的预告提示(pre-prompt)通常是在代码中存在语法错误或其他编译问题时出现的。解决这个问题的方法有以下几种: 1. 检查代码:检查代码是否有语法错误或其他编译问题,并修复错误。 2. 重新编译代码:如果代码已经修复,请重新编译代码。 3. 重启Dev-C++:如果仍然存在问题,请重启Dev-C++,然后重试编译。 4. 更新Dev-C++:如果仍然存在问题,请考虑更新Dev-C++至最新版本,以确保所使用软件是最新的。 希望这些信息能帮助您解决Dev-C++中的预告提示问题。 ### 回答2: 在Dev C中进行调试时,遇到pre-prompt窗口的问题可以通过以下方法解决。 首先,pre-prompt窗口是由于在代码中使用了system函数而导致的。system函数可以执行一些系统命令,但它也会在命令执行后暂停程序的运行,等待用户输入任意键才会继续运行。因此,在调试过程中,pre-prompt窗口会出现并等待用户操作,进一步导致调试过程中断。 为了解决这个问题,我们可以考虑以下两种方法: 1. 删除或注释掉使用system函数的代码:如果使用system函数的代码不是必须的,或者不依赖于用户的输入,那么可以直接删除或注释掉这部分代码。这样可以避免pre-prompt窗口的出现,程序可以继续正常运行。 2. 修改代码以避免pre-prompt窗口的出现:如果使用system函数的代码是必要的,并且依赖于用户的输入,我们可以通过将system函数封装到一个函数中,并在函数中添加相应的逻辑判断,避免调试时出现pre-prompt窗口。例如,在函数中可以通过判断是否处于调试模式来决定是否执行system函数以及是否等待用户输入。 总之,解决Dev C中调试时pre-prompt窗口的问题,一方面可以删除或注释掉使用system函数的代码,另一方面可以修改代码以避免pre-prompt窗口的出现。这样可以使调试过程更加顺利地进行。 ### 回答3: 在Dev C++中调试时,遇到pre-prompt问题时,可以采取以下解决方法。 首先,我们需要了解pre-prompt的含义。pre-prompt是指在程序运行时,出现一个提示框,在提示框中等待用户输入特定的数据或命令。由于这个提示框会暂停程序的执行,因此会影响程序的调试。 要解决pre-prompt问题,一个常用的方法是将输入数据或命令在代码中直接设置好,以避免出现预期之外的等待。这样就能够使程序的执行不受干扰,方便进行调试。 另外一个解决方法是使用自动化测试。可以编写一个测试脚本,通过模拟用户输入,代替手动输入,来完成程序的运行和调试。这样能够更好地控制程序的输入和输出,提高调试效率。 另外,还可以使用条件编译来解决pre-prompt问题。使用条件编译的方式,可以根据不同的调试阶段选择性地启用或禁用pre-prompt代码,从而在调试时避免pre-prompt的干扰。 最后,如果以上方法无法解决pre-prompt问题,也可以考虑使用其他集成开发环境(IDE)进行调试。例如,可以尝试使用Visual Studio等IDE,它们提供了更强大的调试功能,可以更好地处理pre-prompt问题。 综上所述,对于Dev C++中调试时遇到的pre-prompt问题,可以通过设置输入数据、使用自动化测试、条件编译或尝试其他IDE等方法进行解决。这将提高调试效率,便于我们找出程序中的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mahuifa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值