2013-02-19 68 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