Gdb 使用GNU调试器,如何单步执行asm语句?

Gdb 使用GNU调试器,如何单步执行asm语句?,gdb,debugging,Gdb,Debugging,我如何单步执行\uu asm\uu,以便打印寄存器以查看它们存储的内容?现在,我在\uu asm\uuu行上放了一个中断,然后我尝试按stepi或si,但它没有进入movl行。我做错了什么?si正在跳过movl指令(您可以通过键入display/I$pc并观察输出如何变化来验证这一点 没有发生的(以及可能让您困惑的)是对源代码的更新。这是因为asm()中的代码没有任何行号注释,所以GDB无法判断应该显示哪一行 通常情况下,编译器会将这些注释放入程序集中。但在这里,您绕过了编译器。如果希望行号正确

我如何单步执行
\uu asm\uu
,以便打印寄存器以查看它们存储的内容?现在,我在
\uu asm\uuu
行上放了一个中断,然后我尝试按
stepi
si
,但它没有进入
movl
行。我做错了什么?

si正在跳过
movl
指令(您可以通过键入
display/I$pc
并观察输出如何变化来验证这一点

没有发生的(以及可能让您困惑的)是对源代码的更新。这是因为asm()中的代码没有任何行号注释,所以GDB无法判断应该显示哪一行

通常情况下,编译器会将这些注释放入程序集中。但在这里,您绕过了编译器。如果希望行号正确,您必须自己添加这些注释(这通常不值得麻烦)。si正在跳过
movl
指令(您可以通过键入
display/i$pc
并观察输出的变化来验证这一点

没有发生的(以及可能让您困惑的)是对源代码的更新。这是因为asm()中的代码没有任何行号注释,所以GDB无法判断应该显示哪一行


通常情况下,编译器会将这些注释放入程序集中。但在这里,您绕过了编译器。如果希望行号正确,您必须自己添加这些注释(这通常不值得费心).

什么是
$pc
?程序计数器?是,$pc是程序计数器,x86_64上的值为$rip。输入
布局规则有助于直观地执行步骤,一个--tui视图。什么是
$pc
?程序计数器?是,$pc是程序计数器,x86_64上的值为$rip。输入
布局规则有助于直观地执行步骤,a--途易视图。
  __asm__("\n\
    movl $1, %eax\n\
  ");