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. 项目快速启动
安装
- 下载适用于 Windows 64 位的 64 位二进制文件(支持 64 位和 32 位应用程序),或适用于 Windows 32 位的 32 位版本。
- 运行以下命令进行安装:
drmingw -i
- 安装成功后,系统会注册 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),仅供参考