我试图分析为什么一个(相当大的)程序段错误。如果程序崩溃,它会将核心转储写入 /tmp,我尝试使用 gdb 进行分析。但是,gdb 给了我以下错误:
Reading symbols from /home/user/Executable...Dwarf Error:
wrong version in compilation unit header (is 4, should be 2)
[in module /home/user/Executable]
我搜索了一下,发现了 stackoverflow 上的一个线程,作者认为这是用不同的-g
标志编译部分代码(恰好是他/她正在使用的库)的结果。
我已经检查了我的可执行文件(C++)和我在我的程序中使用的库(C)上的编译单元的版本
readelf --debug-dump=info Executable | grep -A 2 'Compilation Unit @'
显然,可执行文件到处都有版本 4,而库的版本是 2。我想知道是否有可能解决这个问题以及如何解决?我也很好奇这个问题实际上是如何首先出现的(通过 -g 标志玩弄调试级别根本没有帮助)。
TIA