我正在使用Microsoft Visual C++ 6.0並嘗試調試其他人的程序。我試圖使用printf語句,但由於某種原因,這些語句在程序運行時並未顯示在屏幕上。我可以使用fprintf將這些語句打印到文件中,但是當程序在執行過程中崩潰時,這是無用的,因爲該文件將是空的。printf語句不顯示
如何強制一些輸出到屏幕?
我正在使用Microsoft Visual C++ 6.0並嘗試調試其他人的程序。我試圖使用printf語句,但由於某種原因,這些語句在程序運行時並未顯示在屏幕上。我可以使用fprintf將這些語句打印到文件中,但是當程序在執行過程中崩潰時,這是無用的,因爲該文件將是空的。printf語句不顯示
如何強制一些輸出到屏幕?
要強制輸出到屏幕上,請參閱下面的第一部分。下面的第二個和第三個選項也適用於調試類似這樣的程序崩潰。
使用與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
是這個項目的控制檯應用程序或GUI一個?除非創建控制檯窗口,否則'printf'不起作用。 – Dai
這是一個控制檯應用程序。在MS-DOS/cmd屏幕上沒有任何顯示。 – Rayne
嘗試使用'fprintf()'與'stderr'。 –