Visual studio 2008输出窗口停止工作



我在VS 2008中做一个c++项目已经有一段时间了。直到最近,在终止我的应用程序时,输出窗口将显示我是否有任何内存泄漏。然而,几天前我注意到它停止显示这些有价值的信息。我还试着抛出一些printf(),但输出窗口也没有显示。

我猜我改变了一个偏好,但我似乎找不到它。现在所有的输出显示的是它加载/卸载了哪个dll。什么好主意吗?

谢谢,迈克

根据我自己的经验,内存泄漏输出丢失可能是由于不同的原因。总结一下最重要的:

  1. 源代码的变化:

    • 禁用内存泄漏报告(即使用_CrtSetDbgFlag)
    • 安装自定义报告挂钩(见_CrtSetReportHook, _CrtSetReportHook2)
    • 将输出重定向到一个文件(参见CrtSetReportMode
    • )
    • 源代码中导致应用程序终止时无声"崩溃"的更改——在到达报告内存泄漏的点之前,应用程序在没有任何问题指示的情况下无声地终止(似乎不太可能发生这种情况)。
  2. 开发环境中的设置导致输出被重定向到另一个窗口。一种可能性是:Tools Options Debugging General 将所有输出窗口文本重定向到立即窗口(从底部开始的第五个)。

我想排除第2点的一种可能性是在(main.cpp)行中创建一个简单的控制台应用程序:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#ifndef DEBUG_NEW
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
#endif
int _tmain(int argc, _TCHAR* argv[])
{
    int nOldState = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
    _CrtSetDbgFlag(nOldState | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
    int *pInt = new int[100];
    return 0;
}

如果正确运行此应用程序输出内存泄漏,那么不幸的是,您可能处于情况1

当然,我排除了输出可能消失的明显原因(其中一些已经在评论中提到)。

相关内容

  • 没有找到相关文章

最新更新