1

我正在使用 Microsoft Visual C++ 6.0 并尝试调试其他人的程序。我尝试使用 printf 语句,但由于某种原因,这些语句在程序运行时没有显示在屏幕上。我可以使用 fprintf 将这些语句打印到文件中,但是当程序在执行过程中崩溃时这是无用的,因为那时文件将为空。

如何强制某些输出显示在屏幕上?

4

1 回答 1

2

要强制输出到屏幕,请参阅下面的第一部分。下面的第二个和第三个选项也适用于调试此类程序崩溃。

将 printf 与 fflush 一起使用(改进 Vishal Kumar 的答案)

Vishal Kumar 的回答对我有用,但我必须做一些研究才能了解如何使用 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

运行,观察输出,并在最后一个打印的语句和第一个不打印的语句之间放置更多的打印语句,直到找出问题为止。

调试器

如果您能够使用调试器,那么它是比在代码中添加上述输出语句更有效的选择,但在某些情况下您必须求助于它。

瓦尔格林德

如果您使用的是 Linux(我认为您不是因为它在 MS Visual C++ 中),valgrind 是查看代码崩溃位置(以及检测内存泄漏)的另一种选择。如果您的代码是为调试而编译的,如果您的程序名为“myProgram”,您可以从终端窗口调用,如下所示:

valgrind myProgram
于 2014-06-05T15:17:58.390 回答