调试交叉编译的代码:Linux-> Windows

时间:2011-05-31 19:51:49

标签: c windows linux cross-compiling pdb-files

我正在交叉编译从Linux到目标Windows的项目(使用mingw)。输出是一个DLL,并从C#中调用它,但调试非常困难。构建输出一个.o文件,它可以为gdb提供符号,但基本上我可以做的就是中断异常并找到异常发生时正在执行的函数的名称;甚至没有完整的堆栈跟踪。我无法使用WinDbg进行调试,因为我没有.pdb文件。

这是一个基于Linux构建的开源项目;我相信他们的构建过程依赖于几个已安装的Linux软件包。

我有什么选择吗?是否有可以将.o文件转换为.pdb的实用程序?或者某些程序在调试时可以提供比gdb更多的信息?

4 个答案:

答案 0 :(得分:1)

尝试支持mingw的IDE。例如,开源Code::blocks

答案 1 :(得分:1)

另一种可能性是手动执行:使用调试符号编译它,启动应用程序并将GDB调试器附加到它。它也是MingW32发行版的一部分。然后,您可以设置断点并调试应用程序

但我觉得使用Code :: Block更舒服

顺便说一句,GCC编译器不生成pdb文件,因为它是一种专有格式

答案 2 :(得分:0)

xpol的含义可能是:如果你有一个完整的mingw安装,那么Code :: blocks可以使用gdb来可视化调试会话,就像在Visual Studio或Eclipse中完成一样。请参阅http://www.codeblocks.org/features

上的“调试器”一章

答案 3 :(得分:0)

您可以使用Visual D中的.pdb生成cv2pdb.exe文件。如果用mingw编译,这甚至适用于没有用D编写的程序。下载并安装 Visual D cv2pdb.exe后,可以在C:\Program Files (x86)\VisualD\cv2pdb\cv2pdb.exe找到。

您可以针对此类可执行文件运行cv2pdb.exe

cv2pdb.exe -n target.exe

这将生成一个名为target.pdb的文件。假设target.pdbtarget.exe都在当前导演中,那么您可以像这样使用windbg

windbg -sflags 0x80030377 -y . -z target.dmp

在这种情况下,我还将minidump文件作为target.dmp传递。这可以省略。 -sflags 0x80030377选项告诉windbg加载target.pdb,即使它认为它与target.exe不匹配。

请注意,windbg加载target.pdb需要很长时间。只需等到它不再在命令输入框的左侧显示*BUSY*

或者,您可以尝试DrMinGW