【问题标题】:visual studio 2008 output window stopped workingVisual Studio 2008 输出窗口停止工作
【发布时间】:2011-09-20 02:13:51
【问题描述】:

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

我猜我在某处更改了偏好,但我似乎找不到它。现在所有输出显示的是它已加载/卸载的 dll。有什么想法吗?

谢谢, 迈克

【问题讨论】:

  • 您确定输出窗口没有设置为显示构建输出,而不是调试输出?
  • 是的,它肯定设置为“显示调试输出”
  • 一位同事在使用 VS 2008 C++ 时遇到了同样的问题。一周前它“自行修复”,我们不知道如何/是什么修复了它。他得到了所有的调试输出(例如符号加载、跟踪等),而不是 dbg_heap 例程的任何内存泄漏输出。只是想让你知道你不是在想象事情。
  • 大声笑,谢谢 franji1...总是很高兴知道 :)

标签: c++ visual-studio-2008 output-window


【解决方案1】:

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

  1. 源代码中的更改:

    • 禁用内存泄漏报告(即使用_CrtSetDbgFlag
    • 安装自定义报告挂钩(请参阅 _CrtSetReportHook,_CrtSetReportHook2
    • 将输出重定向到文件(见CrtSetReportMode
    • 导致应用程序终止时静默“崩溃”的源代码更改 - 在到达报告内存泄漏的点之前,应用程序静默终止,没有任何问题迹象(这似乎不太可能,我曾经有过这种情况) .
  2. 开发环境中的设置会导致输出重定向到另一个窗口。一种可能性是:工具\选项\调试\常规\将所有输出窗口文本重定向到即时窗口(倒数第五个)。这里可能还存在其他可能性。

我想排除第 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 种情况

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

【讨论】:

  • 感谢 ds27680 的信息。我运行了你发布的那个示例程序,它确实输出泄漏,所以我想这不是 Visual Studio 的问题。您提到我的应用程序可能在打印调试信息之前退出。你有更多关于如何发生的信息吗?另外,如果它有所作为,我正在编写一个 directx 应用程序,而不是一个控制台应用程序。
  • @mike 最好的调试方法是在 CRT 源代码中放置一个断点(即一个好地方是 crtlib.c 在“else if (dwReason == DLL_PROCESS_DETACH ) {" 分支,就在 #ifdef _DEBUG /* 转储所有内存泄漏 / if (_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) & _CRTDBG_LEAK_CHECK_DF) { _CrtSetDumpClient(NULL); __freeCrtMemory(); _CrtDumpMemoryLeaks(); } #endif / i> _DEBUG */
  • @mike 从该断点向下调试 u 并输入 _CrtDumpMemoryLeaks(); (如果函数被调用)。如果不是,则可能意味着某些代码在某处取消了 _CRTDBG_LEAK_CHECK_DF 标志。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多