Linux下利用addr2line定位段错误

程序经常会莫名其妙的崩溃,引起段错误,核心已转储,还不知道到底问题出在哪,通过设置断点一点点调效率太低,通过输出的错误信息,可通过addr2line定位出现错误的地方,简单且高效。
使用一个最简单的double free 的例子,可执行文件名为Debug_test.

#include <iostream>

int main() {
    int *p = new int(3);
    delete p;
    delete p;//double free
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

编译完,运行输出:

*** Error in `./Debug_test': double free or corruption (fasttop): 0x00000000025fdc20 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7feed6b967e5]
/lib/x86_64-linux-gnu/libc.so.6(+0x8037a)[0x7feed6b9f37a]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7feed6ba353c]
./Debug_test[0x40090a]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7feed6b3f830]
./Debug_test[0x400809]
======= Memory map: ========
00400000-00401000 r-xp 00000000 103:07 3424014                           /home/lzy/CLionProjects/Debug_test/cmake-build-debug/Debug_test
00600000-00601000 r--p 00000000 103:07 3424014                           /home/lzy/CLionProjects/Debug_test/cmake-build-debug/Debug_test
00601000-00602000 rw-p 00001000 103:07 3424014                           /home/lzy/CLionProjects/Debug_test/cmake-build-debug/Debug_test
025ec000-0261e000 rw-p 00000000 00:00 0                                  [heap]
7feed0000000-7feed0021000 rw-p 00000000 00:00 0 
7feed0021000-7feed4000000 ---p 00000000 00:00 0 
7feed6600000-7feed6616000 r-xp 00000000 103:08 1709445                   /lib/x86_64-linux-gnu/libgcc_s.so.1
7feed6616000-7feed6815000 ---p 00016000 103:08 1709445                   /lib/x86_64-linux-gnu/libgcc_s.so.1
7feed6815000-7feed6816000 rw-p 00015000 103:08 1709445                   /lib/x86_64-linux-gnu/libgcc_s.so.1
7feed6816000-7feed691e000 r-xp 00000000 103:08 1709453                   /lib/x86_64-linux-gnu/libm-2.23.so
7feed691e000-7feed6b1d000 ---p 00108000 103:08 1709453                   /lib/x86_64-linux-gnu/libm-2.23.so
7feed6b1d000-7feed6b1e000 r--p 00107000 103:08 1709453                   /lib/x86_64-linux-gnu/libm-2.23.so
7feed6b1e000-7feed6b1f000 rw-p 00108000 103:08 1709453                   /lib/x86_64-linux-gnu/libm-2.23.so
7feed6b1f000-7feed6cdf000 r-xp 00000000 103:08 1709428                   /lib/x86_64-linux-gnu/libc-2.23.so
7feed6cdf000-7feed6edf000 ---p 001c0000 103:08 1709428                   /lib/x86_64-linux-gnu/libc-2.23.so
7feed6edf000-7feed6ee3000 r--p 001c0000 103:08 1709428                   /lib/x86_64-linux-gnu/libc-2.23.so
7feed6ee3000-7feed6ee5000 rw-p 001c4000 103:08 1709428                   /lib/x86_64-linux-gnu/libc-2.23.so
7feed6ee5000-7feed6ee9000 rw-p 00000000 00:00 0 
7feed6ee9000-7feed705b000 r-xp 00000000 103:08 1048970                   /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21
7feed705b000-7feed725b000 ---p 00172000 103:08 1048970                   /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21
7feed725b000-7feed7265000 r--p 00172000 103:08 1048970                   /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21
7feed7265000-7feed7267000 rw-p 0017c000 103:08 1048970                   /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21
7feed7267000-7feed726b000 rw-p 00000000 00:00 0 
7feed726b000-7feed7291000 r-xp 00000000 103:08 1709087                   /lib/x86_64-linux-gnu/ld-2.23.so
7feed7448000-7feed744d000 rw-p 00000000 00:00 0 
7feed748e000-7feed7490000 rw-p 00000000 00:00 0 
7feed7490000-7feed7491000 r--p 00025000 103:08 1709087                   /lib/x86_64-linux-gnu/ld-2.23.so
7feed7491000-7feed7492000 rw-p 00026000 103:08 1709087                   /lib/x86_64-linux-gnu/ld-2.23.so
7feed7492000-7feed7493000 rw-p 00000000 00:00 0 
7fffdaf96000-7fffdafb8000 rw-p 00000000 00:00 0                          [stack]
7fffdafba000-7fffdafbd000 r--p 00000000 00:00 0                          [vvar]
7fffdafbd000-7fffdafbf000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
已放弃 (核心已转储)

执行命令

addr2line -e ./Debug_test 40090a -f

其中40090a是发生错误时指令的地址,在Backtrace中的./Debug_test[0x40090a]可以找到该地址,运行命令后可得到出错的位置:

main
/home/lzy/CLionProjects/Debug_test/main.cpp:7

如下图所示:
在这里插入图片描述

原创文章 62 获赞 133 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43142797/article/details/105430884