2013-02-19 67 views
1
int main(int ac, char *av[]) 
{ 
    printf("%d"); 
    return 0; 
} 

我知道这将打印垃圾,但如何用gdb检查垃圾值跟踪程序?追踪程序GDB

+0

代码中没有垃圾值。如果你调用'printf(“%d \ n”,x);'带有未初始化的'int x;''。如果您在编译时将'-Wall'传递给'gcc',则会发出警告。所以我不明白这个问题(你可以用'gdb'在'printf'中放置一个断点) – 2013-02-19 06:50:36

+1

你想知道在调用'printf'之前“垃圾值”是多少?或者你希望能够进入'printf'功能? – 2013-02-19 06:51:43

+0

我同意其他人的观点,您的问题并不完全清楚。你到底想通过使用'gdb'来获得你无法运行的程序? – NPE 2013-02-19 06:53:11

回答

3

你可以穿上printf一个断点,并检查使用$esp

gdb不知道垃圾值栈;但在你的情况下printf碰巧从堆栈中检索(使用va_args)一些“未定义”(实际上是“未初始化”,即包含一些先前的垃圾)值。

+0

我想进入printf。我正在阅读C,并且在一次面试问题中我发现了这个问题,我立即明白这会打印垃圾,但我想用gdb进行调试,以了解C程序的后台进程。 – SamKan 2013-02-19 09:31:19