SIGSEGV的回溯

sec*_*ask 6 c linux debugging backtrace segmentation-fault

我正在使用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)
Run Code Online (Sandbox Code Playgroud)

这个信息来自核心文件,我不是很熟悉Linux环境下的调试,有什么办法可以找到问题所在吗?

编辑:所有源文件都使用标志编译如下

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"
Run Code Online (Sandbox Code Playgroud)

osg*_*sgx 2

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

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

gdb --args ./application application_options
Run Code Online (Sandbox Code Playgroud)

然后“运行”gdb 命令。

从 gdb 运行将检测 SIGSEGV,并且 gdb 将关注失败的线程。