GDB如何在NASM退出时获取回溯?

问题描述 投票:0回答:1

[GDB中的Backtrace在NASM中比在C中更受限制,但是通常我在程序主体中看到这种类型的backtrace:

#0  set_data () at ProgramName.asm:863
#1  0x0000000000000000 in ?? ()

我有一个两核程序(每个核都分配给一个不同的任务),并且在退出时(退出)有最后一个核段。到那时,我看到的所有bt(backtrace)都是:

(gdb) bt
#0  0x0000000000000100 in ?? ()
#1  0x0000000000000000 in ?? ()

那是在NASM中-我想C会给我显示更多信息。我的问题是,我如何查看更多信息以在程序退出(退出)时调试段错误。在段故障发生时,另一个线程(核心)已经退出,这是线程的状态:

(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 ?? ()

我需要查看线程3(0x7fffea724700)发生段错误的位置。 bt没有显示足够的信息。

一个问题表明堆栈损坏。在此程序中,我将一些变量存储在堆栈中。我以sub rsp,64开头,以add rsp,64结尾,因此应该照顾堆栈,但这可能与退出时的自发错误和缺少回溯信息有关。

如何在NASM退出时在段隔离中查看回溯的更多信息?

segmentation-fault gdb nasm
1个回答
0
投票

我需要查看线程3(0x7fffea724700)segfaults的位置。

$rip的值为0x100时发生段错误。 如何代码最终在没有MCVE的情况下无法确定。

在程序退出(退出)时调试段错误。

Exit和ret(urn)是不一样的东西。创建任务时没有任务,您是否要返回呼叫者?

© www.soinside.com 2019 - 2024. All rights reserved.