如何使用Mingw将调试符号转换为DLL,或将它们提取到dbg文件?

时间:2010-02-11 15:19:03

标签: c debugging dll gcc mingw

我编写了一个共享库,部分由Visual Studio 6(纯C)编写的Windows应用程序使用。

这个库可以在Linux下完美运行,但在Windows下某些东西已经被破坏了(它使用了一些#ifdef WIN32,可能会包含一些错误的内容)。

但是将库DLL作为“附加DLL”添加到VS6中的项目并在调试模式下运行应用程序,它说DLL文件不包含调试信息。

该库是基于gcc构建的,没有优化(-O0)和调试符号(-g)。

i586-mingw32msvc-nm -a file.dll会显示符号,当剥离DLL时,其大小会减少一半而i586-mingw32msvc-nm -a file.dll将不再显示任何内容。

但Visual Studio 6仍然抱怨缺少调试信息。使用“Dependeny Walker”工具,它在库中显示“Debug = No”。

为了能够在Windows下运行时解决问题,调试信息至关重要。但是如何将它们包含在DLL中(以VS6兼容的方式)或者将它们提取到dbg / pdb文件?

3 个答案:

答案 0 :(得分:0)

问题是GCC并不真正了解PDB。理想情况下,如果你可以尝试使用VC6构建DLL(好吧,理想情况下我不会,我会在Windows上使用更好的编译器,因为VC6已经过时了)。另一种选择可能是使用MingW构建整个应用程序,然后使用带有适当前端的gdb。

然而,this email might help - 我自己没有尝试过,看起来你的调试信息非常有限。

答案 1 :(得分:0)

您总是可以使用gdb作为调试器而不是windbg。它会理解gcc / g ++ / mingw工具链中的符号。可能没有完全集成到您的工具包中,但它会为您提供符号。在mingw二进制安装程序中可以使用Windows版本的gdb。

答案 2 :(得分:-2)

GCC和VC ++不使用相同的调试信息格式,因此您可以尽可能地使用它。然而,使用调试器绝不是必不可少的 - 不要过分依赖调试器是个好主意。