我的程序试图加载一些dll。第一次加载时问题不会出现。但它每7次就会出现一次。我猜存在内存损坏。有没有工具或东西来调试visual c ++的内存损坏。我尝试了一些内存泄漏工具,但没有内存泄漏。
请帮助!!!
的问候, 苏雷什
答案 0 :(得分:1)
我写了一篇博客,介绍了一些可以用来查找内存损坏的步骤。真正有用的是gflags one(#2)。
使用适用于Windows的调试工具:如果您没有这个,请立即开始使用。对于一些严肃的调试,你得到windbg,我将很快写一篇博客。但是,我最常使用的实用程序是GFLAGS。它最有用的功能之一是能够在自己的页面上进行每个堆分配(+ hpa)。这意味着您可以在初始取消引用时检测到内存超出范围错误,而不是在您最终对重要内容进行涂鸦时检测到。
此选项使您的进程使用更多内存并且速度明显变慢。我建议在命令提示符下运行此行后,在调试器中运行整个单元测试套件(如果您使用的是NUnit gui测试运行器)。
gflags -i nunit-gui.exe +hpa
将nunit-gui.exe替换为测试运行器.exe的名称。 (记得在完成-hpa后将其关闭)。更多关于GFLAGS。
WinDBG对于追踪非托管内存泄漏至关重要。您还可以查看AutomatedQA的工具,这些工具更容易使用 - 我仍然认为值得学习WinDBG。
答案 1 :(得分:0)
首先要尝试使用Debug
配置从Visual Studio IDE编译和运行程序。这使得一些堆检查和其他可能立即显示错误的选项成为可能。
确保您正在编译所有警告(/W4
),并且您既不会忽略它们,也不会添加强制转换以使它们消失。如果你听它,编译器就是一个好朋友。
由于它不是每次都发生,这可能是与时间相关的,或者是一个未初始化的变量,它通常会在某个功能正常的值上浮动。