Inferior 1 (process xxx) exited with code 0177

今天调试的时候遇到个很奇怪的问题,我的服务是多进程的,每次收到请求子进程就退出了,然后又重新被父进程拉起一个新的子进程,看了下core目录也没有生成core文件。

  • 通过日志看到当前执行到了哪里,在后面调用和return位置加打印TODO,再次调试,发现是在调用一个函数的时候直接退出了,并且都没有进入到函数里面去。
  • 通过ps -ef查看子进程的pid,然后gdb -p到子进程上,打断点,再次调试
(gdb) b xxx.cpp:26
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编译选项没有强制在存在任何未定义符号的情况下生成致命错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值