Debugging 将调试符号从DWARF转换为PDB

Debugging 将调试符号从DWARF转换为PDB,debugging,debug-symbols,dwarf,Debugging,Debug Symbols,Dwarf,有没有办法将调试信息从binutils的DWARF格式(例如,由GCC在Cygwin上发出)转换为Microsoft PDB(由Visual Studio使用)?cv2pdb可以做到这一点。我的结果好坏参半,有时它工作得很出色,而有时一些局部和全局变量丢失了 FWIW我从来没有听说过这样的工具——但当然这并不意味着它不存在。您可以使用现有的矮人阅读库(我偏爱elfutils)阅读debuginfo,然后使用其他库(我不知道是什么)编写PDB来编写自己的;它有PE可执行文件,而不是ELF。不过,我

有没有办法将调试信息从binutils的DWARF格式(例如,由GCC在Cygwin上发出)转换为Microsoft PDB(由Visual Studio使用)?

cv2pdb可以做到这一点。我的结果好坏参半,有时它工作得很出色,而有时一些局部和全局变量丢失了


FWIW我从来没有听说过这样的工具——但当然这并不意味着它不存在。您可以使用现有的矮人阅读库(我偏爱
elfutils
)阅读debuginfo,然后使用其他库(我不知道是什么)编写PDB来编写自己的;它有PE可执行文件,而不是ELF。不过,我的观点是正确的。那么,这就更难了——有BFD可以读取任何类型的对象文件,但是BFD内置的矮人读取功能非常原始。仍然可能比完全自己滚动更有用。或者你可以复制到一个ELF,只是为了使用elfutils来进行矮人阅读——但是你会被严重的黑客攻击:-)好吧,Cygwin下的gdb确实是:)我已经翻遍了源代码-PE特定的部分在那里。gdb使用BFD库来解码文件格式,比如ELF或PE。有时,它会自己做一些额外的事情。然而,为了读取debuginfo,它有自己的DWARF读取器,很难从其他程序中重用。也许可以向gdb添加一些代码来写出PDB。存在的危险是,由于gdb的内部符号表示,翻译可能必然有损。声明我的可执行文件没有CodeView信息:(另请参见@SevaAlekseyev看到了相同的警告,通过使用
-g
标志编译
exe
修复了该警告。默认情况下,编译器发出了stab,并提供了生成DWARF的选项。一旦我修复了该警告,cv2pdb就做得很好。一些局部变量丢失,调用堆栈缺少条目。不过,这是半可行的。