如何阅读C++崩溃信息

3

你好,我面临着类似以下的问题

*** glibc detected *** /usr/lib/R/bin/exec/R: double free or corruption (out): 0xb1f64430 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x6ebc2)[0xb73f3bc2]
/lib/i386-linux-gnu/libc.so.6(+0x6f862)[0xb73f4862]
/lib/i386-linux-gnu/libc.so.6(cfree+0x6d)[0xb73f794d]
/usr/lib/i386-linux-gnu/libstdc++.so.6(_ZdlPv+0x1f)[0xb684680f]
XXX.so(_XXXDXEv+0x30)[0xb66fab00]
...
/usr/local/lib/libboost_thread.so.1.46.1(thread_proxy+0x69)[0xb694a3a9]
/lib/i386-linux-gnu/libpthread.so.0(+0x6d31)[0xb7508d31]
/lib/i386-linux-gnu/libc.so.6(clone+0x5e)[0xb74570ce]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:05 11536433   /usr/lib/R/bin/exec/R
08049000-0804a000 r--p 00000000 08:05 11536433   /usr/lib/R/bin/exec/R
0804a000-0804b000 rw-p 00001000 08:05 11536433   /usr/lib/R/bin/exec/R
09c38000-0a885000 rw-p 00000000 00:00 0          [heap]
b1a00000-b1aae000 rw-p 00000000 00:00 0 
...

我很好奇...在我的方法的结尾处,XXX那一部分,DxEv是什么?我自己的所有方法都有一个D0Ev、D1Ev或D2Ev附着在它们上面吗?这有什么意义吗?
还有后面的0x30呢?那是进入我的类的字节数还是函数地址?我能解决它吗?
谢谢
2个回答

4

_XXXDXEv是一个被混淆的函数名 - 使用c++filt来解码它。

(_XXXDXEv+0x30)表示该回溯级别在该函数的代码中已经执行了48个字节。

尝试在gdb下重新运行,或者如果有core文件,则在其上运行gdb以获取更多详细信息。


2

它是所谓的“破碎名称”(即由编译器使用参数和返回类型装饰的名称)。您可以使用c++filt实用程序来获取函数签名。0x30 是相对于函数代码流的偏移量,以字节为单位,从开头算起。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接