进程的完整状态
我编写了一个小程序,如下所示:
#include<stdio.h>
int c=0;
int main()
{
int a=10,b=20;
printf("Hello World\n");
c = a+b;
printf("%d\n",c);
return 0;
}
我可以使用命令gcc -save-temps helloworld.c创建a.out文件。 save-temps 标志允许我们保存中间文件 helloworld.i、helloworld.s、helloworld.o
现在我想确切地知道该程序的堆栈在执行过程中如何变化。有人可以告诉我该怎么做吗?
我这个问题的目的是准确地了解任何程序执行期间发生的情况。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以简单地查看 helloworld.s,它会列出程序中的汇编代码,从中您可以准确地知道堆栈发生了什么,并可以观察变量在何时何地弹出/推送到堆栈上。如果您想观察程序的执行情况,也可以使用
-g
标志编译代码,然后通过 gdb.You could simply look at helloworld.s, it will have a listing of the assembly code in the program, from this you can tell exactly what happens to stack and can observe where and when variables are popped off/pushed onto it. If you want to observe the program executing, you could compile the code with the
-g
flag as well, and then run it through gdb.