如何阅读 C++崩溃信息
嗨,我面临着类似的问题,
*** 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呢?这是我的类中的字节数吗?还是函数地址?我能以某种方式解决它吗?
谢谢
Hi I am faced with something along the lines of
*** 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
...
I am just wondering... that bit with XXX, at the end of my own methods, what is the DxEv? All of my own methods have either a D0Ev, D1Ev or D2Ev attached to them? Does this have any meaning?
And what about the 0x30 afterwards? Is that the number of bytes into my class? Or a function address? Could I resolve it somehow?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
_XXXDXEv
是一个损坏的函数名称 - 使用c++filt
对其进行解码。(_XXXDXEv+0x30)
表示回溯级别为该函数代码的 48 字节。尝试在 gdb 下重新运行,或者在核心文件上运行 gdb(如果有)以获取更多详细信息。
_XXXDXEv
is a mangled function name - usec++filt
to demangle it.(_XXXDXEv+0x30)
means that level of the backtrace was 48 bytes into the code for that function.Try re-running under gdb, or run gdb over a core file if you have it, for more detail.
这是一个所谓的损坏名称(即由编译器用参数和返回类型修饰)。您可以使用
c++filt
实用程序来获取函数签名。0x30
是函数代码流中从头开始的偏移量,以字节为单位。It's a so-called mangled name (i.e. decorated by the compiler with argument and return types). You can use
c++filt
utility to get back function signature.0x30
is an offset into the function code stream, from the start, in bytes.