Inferior1(processxxx)exitedwithcode0177
今天调试的时候遇到个很奇怪的问题,我的服务是多进程的,每次收到请求⼦进程就退出了,然后⼜重新被⽗进程拉起⼀个新的⼦进程,看了下core⽬录也没有⽣成core⽂件。
通过⽇志看到当前执⾏到了哪⾥,在后⾯调⽤和return位置加打印TODO,再次调试,发现是在调⽤⼀个函数的时候直接退出了,并且都没有进⼊到函数⾥⾯去。
通过ps -ef查看⼦进程的pid,然后gdb -p到⼦进程上,打断点,再次调试
(gdb) b xxx.cpp:26exited
No source file named xxx.cpp.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (xxx.cpp:26) pending.
(gdb) c
Continuing.
[Inferior 1 (process 6008) exited with code 0177]
(gdb) quit
0177代表引⽤了未定义的符号,我们进⼀步确认⼀下
在makefile⾥⾯加上-Wl,-z -Wl,defs选项再进⾏编译,编译报错undefined reference to,提到了我们调⽤的函数
我们也可以使⽤ldd -r来查看undefined symbol,也提到了我们调⽤的函数
最后发现问题是,⾃⼰引⽤了⼀个新的so的接⼝,没有加上-l链接。⼀个是刚好这个模块是第⼀次引⽤这个so,makefile⾥⾯没有链接,⼀个是刚好这个模块的makefile编译选项没有强制在存在任何未定义符号的情况下⽣成致命错误。