一个简单的例子来说明我的问题:
// test.c
#include <stdio.h>
int foo1(int i) {
i = i * 2;
return i;
}
void foo2(int i) {
printf("greetings from foo! i = %i", i);
}
int main() {
int i = 7;
foo1(i);
foo2(i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
$ clang -o test -O0 -Wall -g test.c
在 GDB 中,我执行以下操作并开始执行:
(gdb) b foo1
(gdb) b foo2
Run Code Online (Sandbox Code Playgroud)
到达第一个断点后,我反汇编:
(gdb) disassemble
Dump of assembler code for function foo1:
0x0000000000400530 <+0>: push %rbp
0x0000000000400531 <+1>: mov %rsp,%rbp
0x0000000000400534 <+4>: mov %edi,-0x4(%rbp) …Run Code Online (Sandbox Code Playgroud)