守护进程中,线程core dump了, 段错误, 找了一个上午, 终于解决了, 以下是解决过程:
- 由于该服务程序是守护进程, 所以gdb调试run了以后, 父进程退出, 无法跟踪.
上网查了下, 一共有3种方法, 这里采用attach的方法:
<1>.查看所需调试的子进程号, pid
<2>.(gdb)attach pid - 附加到该子进程后:
<1>.info threads:当前运行线程, 可以使用thread [num] 切换线程;
<2>.接下来就可以打断点调试了.
<3>.set scheduler-locking off|on, on 可以保证断点只让当前线程命中, 默认是off(所有线程都可命中断点) - 发现问题:
通过调试发现, core dump 发生在函数FUNC调用返回的时候, 即:return 0的时候报了段错误, 第一次见很奇怪
上网查资料显示原因:
经过排查发现, 调用算法库接口时, 传入参数被修改了, 并且修改越界, 导致栈结构被破坏.从而引发了上述问题.