GDB中的回溯在NASM中比在C中受到更多的限制,但我通常在程序体中看到这种类型的回溯:
#0 set_data () at ProgramName.asm:863
#1 0x0000000000000000 in ?? ()
我有一个双核程序(每个核分配给一个不同的任务)和最后一个退出时的核心段错误(ret)。在这一点上,我看到的bt (回溯)是:
(gdb) bt
#0 0x0000000000000100 in ?? ()
#1 0x0000000000000000 in ?? ()
这是在NASM中的--我想C会给我更多的信息。我的问题是,如何从程序中查看更多信息,以便在退出(ret)时调试段故障。在段故障发生时,另一个线程(核心)已经退出,这是线程的状态:
(gdb) info threads
Id Target Id Frame
1 Thread 0x7ffff7fea740 (LWP 22160) "Call_Create_Thr" 0x00007ffff6ff3d2d in __GI___pthread_timedjoin_ex (threadid=140737126745856, thread_return=0x0,
abstime=0x0, block=<optimized out>) at pthread_join_common.c:89
* 3 Thread 0x7fffea724700 (LWP 22165) "Call_Create_Thr" 0x0000000000000100 in ?? ()
我需要看看Thread 3(0x7fffe724700)在哪里有段错误。bt没有透露足够的信息。
一个问题是堆栈损坏。在这个程序中,我在堆栈中存储了一些变量;我从sub rsp,64开始,以add rsp,64结束,所以这应该会处理堆栈,但这可能与退出时的sefault和缺乏回溯信息有关。
如何使用回溯查看更多信息,其中我在NASM中退出时出现了段错误?
发布于 2020-04-16 09:50:17
我需要查看线程3(0x7fffe724700)的段错误。
当$rip
获得值0x100
时,它会分段。如果没有MCVE,我们就不能知道代码是如何结束的。
在程序退出(ret)时调试段错误。
Exit和ret(urn)不是一回事。当任务创建时没有调用者时,您是否返回给调用者?
https://stackoverflow.com/questions/61239845
复制相似问题