2012-11-09 111 views
1

我正在使用Microsoft Visual C++ 6.0並嘗試調試其他人的程序。我試圖使用printf語句,但由於某種原因,這些語句在程序運行時並未顯示在屏幕上。我可以使用fprintf將這些語句打印到文件中,但是當程序在執行過程中崩潰時,這是無用的,因爲該文件將是空的。printf語句不顯示

如何強制一些輸出到屏幕?

+0

是這個項目的控制檯應用程序或GUI一個?除非創建控制檯窗口,否則'printf'不起作用。 – Dai

+0

這是一個控制檯應用程序。在MS-DOS/cmd屏幕上沒有任何顯示。 – Rayne

+0

嘗試使用'fprintf()'與'stderr'。 –

回答

1

要強制輸出到屏幕上,請參閱下面的第一部分。下面的第二個和第三個選項也適用於調試類似這樣的程序崩潰。

使用與fflush(維沙爾庫馬爾的答案細化)printf的

維沙爾·庫馬爾的回答爲我工作,但我不得不做一些研究,以找出如何使用fflush。我遇到了一個問題,那就是我的程序在printf語句的「中間」崩潰了,這沒有任何意義。這是我對他的回答的完善。在調試器難以使用的情況下(例如多線程),可以在每個printf(或fprintf)語句之後使用fflush。例如,「辣椒代碼」有:

... // code 
printf("Part 1 executed successfully"); 
fflush(stdout); // flushes the stdout buffer 
... // further code 
printf("Part 2 executed successfully"); 
fflush(stdout); 
... // repeat as necessary 

運行,觀察輸出,並把最後一條語句之間更多的打印語句打印,並且不打印的第一條語句,直到您解決問題。

調試

如果您能夠使用調試器,它是一種更有效的選擇,而不是用尖刻上述報表輸出你的代碼,但也有在那裏你不得不求助於該案件。

Valgrind的

如果您使用的是Linux(我猜想你是不是因爲它是在微軟的Visual C++),Valgrind是另一種選擇,看看你的代碼崩潰(用於檢測內存泄漏) 。如果你的代碼編譯調試,如果你的程序被稱爲「myProgram」,你可以剛剛從終端窗口調用如下:

valgrind myProgram