说我有一个非常简单的C程序test.c
,它只打印“hello world”,它的名字a.out
来自gcc test.c
.
我在想是否可以准确监控运行时发生的情况a.out
。例如,我想确切地知道使用了多少字节,等等a.out
使用的每个单元存储器(8位)中发生了什么。a.out
好吧,我只想得到这样的东西:
此时,地址0X00001234的内存正在存储00001001;
下一刻,地址0X00001236的内存正在将其值放入缓存...
听起来像是用GDB一步步执行的。但对我来说,我只有一个可执行的二进制文件。我需要一种方法来测试它,而不是调试。
答案1
您可以使用该选项编译包含调试信息的程序-g
。gdb
然后将遵循源代码,并且在逐步运行时,如果存在相应的源 .c 文件,则显示源代码中的正确行。
该gdb
界面还允许您检查源代码中存在的变量的相应内存位置。
我也不会使用test
二进制名称,因为它与预先存在的指令冲突。
gcc -g mytest.c -o mytest
-g 告诉编译器将符号表信息存储在可执行文件中。除其他外,这包括:
- 符号名称
- 输入符号信息
- 符号来自的文件和行号
另请参阅我的相关答案了解 Linux 二进制文件正在做什么