Debugging 如何从跟踪点获取堆栈回溯跟踪?(GDB)

Debugging 如何从跟踪点获取堆栈回溯跟踪?(GDB),debugging,gdb,Debugging,Gdb,根据本文,不可能从跟踪点获得完整的堆栈回溯跟踪,但是可以通过记录堆栈的一部分来获得部分跟踪 如何执行此操作?我已经大致了解了我希望在断点上使用命令打印回溯然后自动继续的行为: > break functionName > commands > bt > continue > end 作为将来的参考,我刚刚发现了一些与此相关的内容,即不可能在跟踪点中收集backtrace命令的结果,但可以通过读取类似*(unsigned char*)的内容来收集堆栈$esp@300

根据本文,不可能从跟踪点获得完整的堆栈回溯跟踪,但是可以通过记录堆栈的一部分来获得部分跟踪


如何执行此操作?

我已经大致了解了我希望在断点上使用命令打印回溯然后自动继续的行为:

> break functionName
> commands
> bt
> continue
> end

作为将来的参考,我刚刚发现了一些与此相关的内容,即不可能在跟踪点中收集backtrace命令的结果,但可以通过读取类似
*(unsigned char*)的内容来收集堆栈$esp@300
。您可能需要进行一些调整:您可能需要读取更多字节,并且堆栈指针可能具有不同的名称(x86-64的rsp) 否则:

>collect *(unsigned char *)$esp@300
'esp' is a pseudo-register; GDB cannot yet trace its contents.

“break functionName”是一个断点,而不是跟踪点。有没有办法用追踪点达到同样的效果?@AUZKamath我找不到办法。自动继续断点运行得非常快(您可以添加'silent'作为第一个命令来禁止打印断点被击中)。