如何设置确切的指令`gdb`放置断点?

How to set exact instruction `gdb` puts a breakpoint on?

给出这样的代码(假设行号是 x):

if (condition) return false;

...如果 b x 用于在该行设置断点,它将在条件评估时中断。如何指示 gdb 将断点 放在同一行但不同的指令 ?在我的例子中,目标是 return false.

How do I

您可以使用 b *0x1234 语法在您想要的任何指令上设置断点。示例:

(gdb) disas $pc
Dump of assembler code for function main:
=> 0x0000555555555040 <+0>:     xor    %eax,%eax
   0x0000555555555042 <+2>:     cmp    [=10=]x1,%edi
   0x0000555555555045 <+5>:     setg   %al
   0x0000555555555048 <+8>:     retq   
End of assembler dump.
(gdb) b *0x0000555555555045
Breakpoint 2 at 0x555555555045
(gdb) c
Continuing.

Breakpoint 2, 0x0000555555555045 in main ()
(gdb) x/i $pc
=> 0x555555555045 <main+5>:     setg   %al