所以,當我運行我的程序,我做運行GDB,而在文件傳遞從標準輸入的C
./a.out < SampleData
我將如何調試我的程序,同時仍然能夠在sampleData在傳文件?
感謝
編輯:我試圖做
gdb ./a.out
run < SampleData
,當我做到這一點,它運行我的程序,輸出什麼正常輸出,然後給我留下了:
「[劣質1 (進程19460)退出代碼03]「
什麼?
所以,當我運行我的程序,我做運行GDB,而在文件傳遞從標準輸入的C
./a.out < SampleData
我將如何調試我的程序,同時仍然能夠在sampleData在傳文件?
感謝
編輯:我試圖做
gdb ./a.out
run < SampleData
,當我做到這一點,它運行我的程序,輸出什麼正常輸出,然後給我留下了:
「[劣質1 (進程19460)退出代碼03]「
什麼?
gdb --args ./a.out < SampleData
你也可以在gdb裏面做重定向。
gdb a.out
# ...
(gdb) run < SampleData
編輯基於更新:
這樣的文字:
[Inferior 1 (process 19460) exited with code 03]
是gdb
本身的消息。劣質是由gdb
調試的進程的名稱。這裏只有1個(但可以有多個)。退出代碼是您的程序終止的代碼。如果您的main()
函數完成,則它返回的值。如果您撥打exit()
,則表示您通過的值。這些值通常用於傳遞有關程序是否成功返回給調用方的信息(例如shell)。
我建議在C中檢查EXIT_SUCCESS
和EXIT_FAILURE
(分別表示成功/失敗)。許多程序定義了額外的退出代碼來表示特定的錯誤
由於這裏的值是03
,這是一個不尋常的退出代碼,我建議也許你的main()
在最後缺少返回語句?
當使用GDB的run
命令,你可以使用正常的輸入重定向:
$ gdb ./a.out
(gdb) run < SampleData
請參考我的編輯 – 2013-03-10 00:40:13
'main'是,如果沒有指定'return'其中一個特例功能,函數返回0(或者相當於'exit(0)'發生或者一些這樣的等價物,我不記得哪個)。我認爲這是在C99中引入的。 – dreamlax 2013-03-10 00:52:45
@dreamlax是的,這是一個奇怪的例外,但它只在C99及以後。也可能是代碼錯誤地定義了'main()'返回'void'。 – FatalError 2013-03-10 00:53:52