GDB简单调试定位<段错误><核心转储>等

本文详细描述了如何使用GDB(GNUDebugger)对CUDA-BEVFusion项目进行调试,遇到SegmentationFault后通过backtrace定位到protobuf库版本不一致的问题,并给出了相应的解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大致流程如下:

1.gdb打开执行文件
2.在gdb输入run

3.在gdb输入backtrace

具体示例如下,在终端用gdb打开你的执行文件:

gdb ./build/bevfusion

在gdb输入run,如下:

(gdb) run

会输出程序崩溃的提示,但是到这一步我们一般看不出具体问题,如下:

Starting program: /home/d120/bev_fusion/Lidar_AI_Solution-2023-12-27/Lidar_AI_Solution/CUDA-BEVFusion/build/bevfusion 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()

 接着在gdb输入backtrace:

(gdb) backtrace

结果如下:

#0  0x0000000000000000 in ?? ()
#1  0x00007fffe88c44bd in ?? () from /lib/x86_64-linux-gnu/libprotobuf.so.23
#2  0x00007fffe88c5f2d in google::protobuf::internal::InitSCCImpl(google::protobuf::internal::SCCInfoBase*) () from /lib/x86_64-linux-gnu/libprotobuf.so.23
#3  0x00007fffe81134ed in google::protobuf::internal::InitSCC (scc=0x7fffe82b4e60 <protobuf_google_2fprotobuf_2fany_2eproto::scc_info_Any>) at ./google/protobuf/generated_message_util.h:373
#4  0x00007fffe81134fd in protobuf_google_2fprotobuf_2fany_2eproto::AddDescriptorsImpl () at google/protobuf/any.pb.cc:88
#5  0x00007ffff7899ee8 in __pthread_once_slow (once_control=0x7fffe82b5858 <protobuf_google_2fprotobuf_2fany_2eproto::AddDescriptors()::once>, init_routine=0x7ffff7cdad50 <__once_proxy>)
    at ./nptl/pthread_once.c:116
#6  0x00007fffe81136b5 in __gthread_once (__func=<optimized out>, __once=0x7fffe82b5858 <protobuf_google_2fprotobuf_2fany_2eproto::AddDescriptors()::once>)
    at /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:700
#7  std::call_once<void (&)()> (__f=<optimized out>, __once=...) at /usr/include/c++/11/mutex:783
#8  google::protobuf::internal::call_once<std::once_flag&, void (&)()> () at ./google/protobuf/stubs/once.h:91
#9  protobuf_google_2fprotobuf_2fany_2eproto::AddDescriptors () at google/protobuf/any.pb.cc:105
#10 0x00007ffff7fc947e in call_init (l=<optimized out>, argc=argc@entry=1, argv=argv@entry=0x7fffffffd6c8, env=env@entry=0x7fffffffd6d8) at ./elf/dl-init.c:70
#11 0x00007ffff7fc9568 in call_init (env=0x7fffffffd6d8, argv=0x7fffffffd6c8, argc=1, l=<optimized out>) at ./elf/dl-init.c:33
#12 _dl_init (main_map=0x7ffff7ffe2e0, argc=1, argv=0x7fffffffd6c8, env=0x7fffffffd6d8) at ./elf/dl-init.c:117
#13 0x00007ffff7fe32ca in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
#14 0x0000000000000001 in ?? ()
#15 0x00007fffffffdaf2 in ?? ()
#16 0x0000000000000000 in ?? ()

根据错误提示,我编译和运行链接时,两个过程使用的protobuf版本不一致导致,这里我把protobuf版本更换一下解决了,具体解决方案根据你的报错提示而定。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值