我正在调试一个新的线程库,在其中手动设置堆栈寄存器rsp
(以切换到用户管理的堆栈),然后调用一个永远不会返回的函数。
当我尝试在gdb中获取回溯时,我得到以下输出。
(gdb) bt
#0 load (_m=std::memory_order_seq_cst, this=<error reading variable: Asked for position 0 of stack, stack only has 0 elements on it.>)
at /usr/include/c++/4.9/atomic:209
#1 Arachne::schedulerMainLoop () at Arachne.cc:236
#2 0x000000000040268d in Arachne::threadMainFunction (id=<optimized out>) at Arachne.cc:135
#3 0x0000000000000000 in ?? ()
< p > gdb
如何确定堆栈中没有元素?
更一般地说, gdb
如何确定堆栈中有多少个元素?
.eh_frame_hdr
部分中的元数据。帧指针是完全可选的,即使使用-fno-omit-frame-pointer
编译代码也可能不使用。请参见https://dev59.com/MWYq5IYBdhLWcg3w7E0F和http://stackoverflow.com/questions/34055891/implementing-stack-backtrace-without-using-ebp。请查看这些内容,看看是否有重复。`.eh_frame_hdr`的搜索命中率更高。 - Peter Cordes