由SIGSEGV回溯

我正在debugging一个multithreading程序ansi C中的应用程序写入。
有时在主线程中会导致SIGSEGV错误。

(gdb) backtrace full #0 0x0000000000000000 in ?? () No symbol table info available. #1 0x0000000000000000 in ?? () No symbol table info available. (gdb) info registers rax 0x1 1 rbx 0x0 0 rcx 0x0 0 rdx 0x2 2 rsi 0x458e7aa0 1166965408 rdi 0x0 0 rbp 0x0 0x0 rsp 0x458e7b60 0x458e7b60 r8 0x458e7b20 1166965536 r9 0x0 0 r10 0x0 0 r11 0x206 518 r12 0x2aaaac400e70 46912522686064 r13 0x2aaaac514090 46912523813008 r14 0x1 1 r15 0x18505f10 407920400 rip 0x0 0 eflags 0x10206 [ PF IF RF ] cs 0x33 51 ss 0x2b 43 ds 0x0 0 es 0x0 0 fs 0x63 99 gs 0x0 0 fctrl 0x37f 895 fstat 0x0 0 ftag 0xffff 65535 fiseg 0x0 0 fioff 0x0 0 foseg 0x0 0 fooff 0x0 0 fop 0x0 0 mxcsr 0x1f80 [ IM DM ZM OM UM PM ] (gdb) 

这个信息是来自核心文件,在Linux环境下我不是很debugging的家庭,有什么我可以做,find问题的地方?

编辑 :所有的源文件编译与标志如下

 gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/redisconnector.d" -MT"src/redisconnector.d" -o"src/redisconnector.o" "../src/redisconnector.c" 

使用“-g”选项重新编译应用程序;

使用Gdb不是与核心文件,而是运行整个应用程序:

 gdb --args ./application application_options 

然后gdb的“运行”命令。

从gdb运行将检测到SIGSEGV,gdb将集中在失败的线程上。

您的RIP指向0.它可能是由堆栈溢出引起的。 你的RBP也是0,所以backtrace gdb命令会告诉你什么。

那么,首先你需要在启用调试的情况下进行编译,这样你的回溯才有用。 该标志是gcc -g