(gdb) s
Things:action (this=0x7fffffffdce0, packet=0x62c980) at file:41
41 if( thing->work(data) ) {
(gdb) s
Program received signal SIGSEGV, Segmentation fault.
0x00000000004040e1 in Things:action (this=0x7fffffffdce0, packet=0x62c980) at file:41
41 if( thing->work(data) ) {
在backtrace
中,工作(数据)是最后一个;并且在GDB管理的进程输入work(data)
之前发生了分段(似乎)。在list
中,没有工作声明(数据),所以猜测执行了更多的代码,而不是回溯和最新步骤。
work()
代码,或者当进程尝试进入函数时发生错误,从而将其参数传递给libc? 答案 0 :(得分:1)
正如我在评论中所说:我认为执行从未达到work(data)
因为this
指针无效(0x7fffffffdce0
看起来像垃圾)。 SIGSEGV位于this->
。
对象是否在某些时候被销毁/删除,并且您是否保留了引用或指针?
答案 1 :(得分:1)
嗯,work()
除非是内联的,否则无法启动,或者它本来就是回溯的顶端......
我会尝试拆解以查看触发SIGSEGV的指令并从那里开始。