Dr. Mingw 开源项目教程

Dr. Mingw 开源项目教程

drmingw Postmortem debugging tools for MinGW. 项目地址: https://gitcode.com/gh_mirrors/dr/drmingw

1. 项目介绍

Dr. Mingw 是一个用于 MinGW 的后期调试工具。它能够在应用程序抛出未处理的异常时,自动附加到应用程序并收集异常信息。Dr. Mingw 支持读取由 Gnu C/C++ 编译器生成的 DWARF 格式调试信息,以及由 Microsoft Visual C++ 编译器生成的 PDB 文件。它依赖于 DbgHelp 库来解析由 Microsoft 工具编译的模块中的符号。

Dr. Mingw 的功能包括:

  • 读取 DWARF 和 PDB 格式的调试信息。
  • 解析符号并生成堆栈回溯。
  • 提供 DLL 形式的符号解析和堆栈回溯功能,可嵌入到应用程序中。

2. 项目快速启动

安装

  1. 下载适用于 Windows 64 位的 64 位二进制文件(支持 64 位和 32 位应用程序),或适用于 Windows 32 位的 32 位版本。
  2. 运行以下命令进行安装:
    drmingw -i
    
  3. 安装成功后,系统会注册 Dr. Mingw 作为默认的 JIT 调试器。

使用示例

以下是一个简单的示例,展示如何使用 Dr. Mingw 进行调试:

#include <iostream>

int main() {
    int* ptr = nullptr;
    *ptr = 10; // 这将导致访问冲突
    return 0;
}

编译并运行上述代码时,Dr. Mingw 会自动附加到应用程序并显示异常信息。

3. 应用案例和最佳实践

案例1:嵌入式异常处理

Dr. Mingw 的 exchndl.dll 可以嵌入到应用程序中,提供与 Dr. Mingw 类似的异常处理功能,而无需用户安装 Dr. Mingw。

#include <windows.h>

int main() {
    HMODULE hModule = LoadLibraryW(L"exchndl.dll");
    if (hModule != NULL) {
        typedef void (*PFNEXCHNDLINIT)();
        PFNEXCHNDLINIT pfnExcHndlInit = (PFNEXCHNDLINIT)GetProcAddress(hModule, "ExcHndlInit");
        if (pfnExcHndlInit != NULL) {
            pfnExcHndlInit();
        }
    }

    int* ptr = nullptr;
    *ptr = 10; // 这将导致访问冲突
    return 0;
}

最佳实践

  • 调试信息:确保应用程序在编译时包含调试信息,以便 Dr. Mingw 能够解析符号。
  • 权限:安装 Dr. Mingw 时需要管理员权限。
  • 嵌入式使用:对于需要嵌入异常处理的应用程序,建议使用 exchndl.dll

4. 典型生态项目

MgwHelp

MgwHelp 是一个旨在替代 DbgHelp 库的库,能够理解 MinGW 符号。它提供了与 DbgHelp 相同的接口,但能够读取由 MinGW 编译器/链接器生成的调试信息。

CatchSegv

CatchSegv 是 Dr. Mingw 中的一个实用工具,类似于 GLIBC 的 catchsegv。它能够在任何致命异常时运行程序并转储堆栈回溯。CatchSegv 还支持收集和转储所有 OutputDebugString 消息,适用于测试自动化。

drmingw Postmortem debugging tools for MinGW. 项目地址: https://gitcode.com/gh_mirrors/dr/drmingw

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

姬如雅Brina

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

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

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

打赏作者

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

抵扣说明:

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

余额充值