2013-03-10 75 views
4

所以,當我運行我的程序,我做運行GDB,而在文件傳遞從標準輸入的C

./a.out < SampleData 

我將如何調試我的程序,同時仍然能夠在sampleData在傳文件?

感謝

編輯:我試圖做

gdb ./a.out 
run < SampleData 

,當我做到這一點,它運行我的程序,輸出什麼正常輸出,然後給我留下了:

「[劣質1 (進程19460)退出代碼03]「

什麼?

回答

1
gdb --args ./a.out < SampleData 
6

你也可以在gdb裏面做重定向。

gdb a.out 
# ... 
(gdb) run < SampleData 

編輯基於更新:

這樣的文字:

[Inferior 1 (process 19460) exited with code 03] 

gdb本身的消息。劣質是由gdb調試的進程的名稱。這裏只有1個(但可以有多個)。退出代碼是您的程序終止的代碼。如果您的main()函數完成,則它返回的值。如果您撥打exit(),則表示您通過的值。這些值通常用於傳遞有關程序是否成功返回給調用方的信息(例如shell)。

我建議在C中檢查EXIT_SUCCESSEXIT_FAILURE(分別表示成功/失敗)。許多程序定義了額外的退出代碼來表示特定的錯誤

由於這裏的值是03,這是一個不尋常的退出代碼,我建議也許你的main()在最後缺少返回語句?

+0

請參考我的編輯 – 2013-03-10 00:40:13

+0

'main'是,如果沒有指定'return'其中一個特例功能,函數返回0(或者相當於'exit(0)'發生或者一些這樣的等價物,我不記得哪個)。我認爲這是在C99中引入的。 – dreamlax 2013-03-10 00:52:45

+0

@dreamlax是的,這是一個奇怪的例外,但它只在C99及以後。也可能是代碼錯誤地定義了'main()'返回'void'。 – FatalError 2013-03-10 00:53:52

0

當使用GDB的run命令,你可以使用正常的輸入重定向:

$ gdb ./a.out 
(gdb) run < SampleData