gdb 中的 "Stack" 部分是什么
What is the "Stack" section in gdb
在 gdb 中,似乎位于“堆栈”部分的任何内容始终与 %rip
寄存器相同。例如:
rip 0x0000555555554603
─── Stack ────────────────────────────────────────────────────────────────────────────────────────
[0] from 0x0000555555554603 in main
在做 si
之后:
rip 0x0000555555554606
─── Stack ────────────────────────────────────────────────────────────────────────────────────────
[0] from 0x0000555555554606 in main
gdb 中的“堆栈”部分到底是什么?在我看来,它或多或少是当前运行函数中的指令指针(%rip
)(以及调用堆栈中尚未完成执行的先前%rip
s) .这是否正确,或者这部分告诉我们什么?
如果有用,这是我在 gdb 中使用的前端,称为 gdb dashboard
:
这就是调用堆栈。 GDB 使您能够看到调用堆栈,因此您可以了解您是如何到达当前位置的(您通过哪些函数调用到达当前位置)。
调用堆栈是已调用但尚未返回的函数列表,从第 0 帧的当前函数开始,一直向下到最后一帧的 main。
在您的特定情况下,您的调用堆栈只是主要的,因为您没有调用其他函数(或者因为它们已经返回)。 %rip 指向当前指令,因此您在当前帧中的位置始终与其内容相对应。
在 gdb 中,似乎位于“堆栈”部分的任何内容始终与 %rip
寄存器相同。例如:
rip 0x0000555555554603
─── Stack ────────────────────────────────────────────────────────────────────────────────────────
[0] from 0x0000555555554603 in main
在做 si
之后:
rip 0x0000555555554606
─── Stack ────────────────────────────────────────────────────────────────────────────────────────
[0] from 0x0000555555554606 in main
gdb 中的“堆栈”部分到底是什么?在我看来,它或多或少是当前运行函数中的指令指针(%rip
)(以及调用堆栈中尚未完成执行的先前%rip
s) .这是否正确,或者这部分告诉我们什么?
如果有用,这是我在 gdb 中使用的前端,称为 gdb dashboard
:
这就是调用堆栈。 GDB 使您能够看到调用堆栈,因此您可以了解您是如何到达当前位置的(您通过哪些函数调用到达当前位置)。
调用堆栈是已调用但尚未返回的函数列表,从第 0 帧的当前函数开始,一直向下到最后一帧的 main。
在您的特定情况下,您的调用堆栈只是主要的,因为您没有调用其他函数(或者因为它们已经返回)。 %rip 指向当前指令,因此您在当前帧中的位置始终与其内容相对应。