将libc回溯转换为源代码行号 [英] Convert a libc backtrace to a source line number

查看:189
本文介绍了将libc回溯转换为源代码行号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个结合了C和Fortran源的MPI应用程序。有时由于内存相关的错误而崩溃,但是我发现这个错误是有问题的(这是在别人的代码中的某个地方,目前我不太熟悉)。我还没有能够用gdb捕获它,但有时会输出如下所示的glibc回溯。



该错误可能接近(main_main_ + 0x3bca )[0x804d5ce],(但有内存错误,我知道这可能不是这种情况)。我的问题是,有谁知道如何将+ 0x3bca或0x804d5ce转换成特定的代码行?



有关跟踪此错误的其他建议也值得赞赏。

  ***检测到glibc *** /home/.../ src / finite_element:munmap_chunk():无效指针:0x09d83018 *** 
======= Backtrace:=========
/ lib / i386-linux-gnu / libc.so.6(+ 0x73e42)[0xb7409e42]
/lib/i386-linux-gnu/libc.so.6(+0x74525)[0xb740a525]
/home/.../src/ finite_element(main_main_ + 0x3bca)[0x804d5ce]
/home/.../src/finite_element[0x804e195]
/home/.../src/finite_element(main+0x34)[0x804e1e8]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb73af4d3]
/ home / davepc / finite-element / src / finite_element [0x8049971]
=== ====内存映射表:========
08048000-08056000 r-xp 00000000 08:05 1346306 /home/.../src/finite_element
08056000-08057000 r-- p 0000d000 08:05 1346306 /home/.../src/finite_element
08057000-08058000 rw-p 0000e000 08:05 1346306 /home/.../src/finite_element
09d1b000-09d8f000 rw- p 00000000 00:00 0 [堆]
b2999000-b699b000 rw-s 00000000 08:03 15855 /tmp/openmpi-sessions-_0/37612/1/shared_mem_pool.babel
b699b000-b6b1d000 rw-p 00000000 00:00 0
b6b31000-b6b3d000 r-xp 00000000 08:03 407798 /usr/lib/openmpi/lib/openmpi/mca_osc_rdma.so
b6b3d000-b6b3e000 r - p 0000b000 08:03 407798 /usr/lib/openmpi/lib/openmpi/mca_osc_rdma.so
b6b3e000- b6b3f000 rw-p 0000c000 08:03 407798 /usr/lib/openmpi/lib/openmpi/mca_osc_rdma.so
< snip>

谢谢...

解决方案

如果你在 gdb 中并且你有调试符号,这很容易。使用 list

 (gdb)list * 0x804d5ce 

这应该给你一行代码,并且如果它能够找到源文件,将显示源代码。 / p>

没有 gdb ,您可以尝试使用 addr2line

  $ addr2line -e finite_element 0x804d5ce 


I have an MPI application with which combines both C and Fortran sources. Occasionally it crashes due to a memory related bug, but I am having trouble finding the bug (it is somewhere in someone else's code, which at the moment I'm not very familiar with). I haven't yet been able to catch it with gdb, but sometimes a glibc backtrace is output as shown below.

The bug is probably close to "(main_main_+0x3bca)[0x804d5ce]", (but with a memory error, I know this may not be the case). My question is, does anyone know how to convert +0x3bca or 0x804d5ce into a particular line of the code?

Any other suggestions on tracking down the bug would also be appreciated. I'm quite familiar with the basics of gdb.

*** glibc detected *** /home/.../src/finite_element: munmap_chunk(): invalid pointer: 0x09d83018 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x73e42)[0xb7409e42]
/lib/i386-linux-gnu/libc.so.6(+0x74525)[0xb740a525]
/home/.../src/finite_element(main_main_+0x3bca)[0x804d5ce]
/home/.../src/finite_element[0x804e195]
/home/.../src/finite_element(main+0x34)[0x804e1e8]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb73af4d3]
/home/davepc/finite-element/src/finite_element[0x8049971]
======= Memory map: ========
08048000-08056000 r-xp 00000000 08:05 1346306    /home/.../src/finite_element
08056000-08057000 r--p 0000d000 08:05 1346306    /home/.../src/finite_element
08057000-08058000 rw-p 0000e000 08:05 1346306    /home/.../src/finite_element
09d1b000-09d8f000 rw-p 00000000 00:00 0          [heap]
b2999000-b699b000 rw-s 00000000 08:03 15855      /tmp/openmpi-sessions-_0/37612/1/shared_mem_pool.babel
b699b000-b6b1d000 rw-p 00000000 00:00 0 
b6b31000-b6b3d000 r-xp 00000000 08:03 407798     /usr/lib/openmpi/lib/openmpi/mca_osc_rdma.so
b6b3d000-b6b3e000 r--p 0000b000 08:03 407798     /usr/lib/openmpi/lib/openmpi/mca_osc_rdma.so
b6b3e000-b6b3f000 rw-p 0000c000 08:03 407798     /usr/lib/openmpi/lib/openmpi/mca_osc_rdma.so
<snip>

Thank you...

解决方案

If you are in gdb and you have debugging symbols, it is quite easy. Use list.

(gdb) list *0x804d5ce

This should give you the line of code, and show you the source if it is able to find the source file.

Without gdb you could try to use addr2line:

$ addr2line -e finite_element 0x804d5ce

这篇关于将libc回溯转换为源代码行号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆