MFC应用程序突然崩溃

MFC应用程序突然崩溃,mfc,tree,crash,mdi,Mfc,Tree,Crash,Mdi,我是MFC新手&我正在维护一个MFC应用程序,它有一个CView窗口GUI,用于使用CTreeCtrl显示和操作树的值。我所有的功能都很好,但有时我会崩溃。但我仍然无法确定坠机原因的任何模式 有时,在一些常见的操作之后,比如更改值(我已经执行了100次,效果很好),应用程序挂起或崩溃;有时,10-15分钟后的最大化是造成这种情况的原因。有时,树文本的大小变得异常粗体,然后挂起/崩溃。检查调用堆栈直到现在都没有用,因为它总是指向DbgCRT或一些内部MFC源文件。这是一个MDI应用程序,我注意到当

我是MFC新手&我正在维护一个MFC应用程序,它有一个CView窗口GUI,用于使用CTreeCtrl显示和操作树的值。我所有的功能都很好,但有时我会崩溃。但我仍然无法确定坠机原因的任何模式

有时,在一些常见的操作之后,比如更改值(我已经执行了100次,效果很好),应用程序挂起或崩溃;有时,10-15分钟后的最大化是造成这种情况的原因。有时,树文本的大小变得异常粗体,然后挂起/崩溃。检查调用堆栈直到现在都没有用,因为它总是指向
DbgCRT
或一些内部MFC源文件。这是一个MDI应用程序,我注意到当文件数量更多或者当前文件有一个大的嵌套树时会发生崩溃

主要问题是我不能随意复制这个bug。我所做的是对树执行各种操作,比如添加新的嵌套分支、更改值&在20-30分钟后可能会发生这种崩溃。任何人请建议任何可能的方法来解决这个随机发生的错误

示例gui:“示例”

补充: 吊死后的一个瞬间:

听起来你在泄漏某种资源,很可能是GDI处理的。这些可能很难找到-您必须检查控件的每次使用(如
CTreeCtrl
、位图、句柄等),以确保在适当的时间正确释放它们(MSFT文档在这里是必不可少的)

  • 在Windows中启动TaskManager,并在与应用程序交互时查看GDI对象列,这会有所帮助。如果句柄数一直在上升,而你的应用程序逻辑认为它不应该上升,那么它会给你一个开始寻找问题的地方

  • VisualStudio调试器还将为您提供内存泄漏的线索。关闭应用程序(调试生成)时,请查看输出窗口。如果您正在泄漏,输出窗口将有指示内存泄漏的输出(类似于:
    检测到内存泄漏
    ,后跟地址和内存转储)

  • 另外,在VisualStudio调试器中运行生成(调试生成)。有时在运行时,输出窗口中会出现泄漏、内存覆盖等线索。请注意这些。他们提供有价值的信息。干净的程序运行将在输出窗口中没有警告、断言、泄漏等

  • 如果你有地方上传你的项目(不是太大),我会帮你看一看

    在这里,勤奋和关注细节就是一切


    坚持住

    感谢@edtheprogrammerguy的回复。从输出窗口中,我看到“f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156):{1399129}正常块,0x04EE0898,21字节长。”-这行有10-20次。我认为这与CString有关,但无法准确找到导致它的代码。以前有一些内存泄漏。我用可视检漏仪解决了这些问题。但问题仍然存在。谢谢@edtheprogrammerguy。。我有GDI句柄在鼠标移动消息上的预翻译消息函数中泄漏。对于那些面临类似问题的人,请参考[链接]()&