如何阅读 C++崩溃信息

发布于 2024-12-11 13:42:50 字数 1104 浏览 0 评论 0原文

嗨,我面临着类似的问题,

*** 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

孤寂小茶 2024-12-18 13:42:50

_XXXDXEv 是一个损坏的函数名称 - 使用 c++filt 对其进行解码。

(_XXXDXEv+0x30) 表示回溯级别为该函数代码的 48 字节。

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

_XXXDXEv is a mangled function name - use c++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.

⒈起吃苦の倖褔 2024-12-18 13:42:50

这是一个所谓的损坏名称(即由编译器用参数和返回类型修饰)。您可以使用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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文