大致流程如下:
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版本更换一下解决了,具体解决方案根据你的报错提示而定。