dll加载时出错

时间:2010-10-29 18:34:30

标签: c++ visual-c++ dll memory-leaks

我的程序试图加载一些dll。第一次加载时问题不会出现。但它每7次就会出现一次。我猜存在内存损坏。有没有工具或东西来调试visual c ++的内存损坏。我尝试了一些内存泄漏工具,但没有内存泄漏。

请帮助!!!

的问候, 苏雷什

2 个答案:

答案 0 :(得分:1)

我写了一篇博客,介绍了一些可以用来查找内存损坏的步骤。真正有用的是gflags one(#2)。

http://www.atalasoft.com/cs/blogs/loufranco/archive/2007/02/06/6-_2200_Pointers_2200_-on-Debugging-Unmanaged-Code.aspx

  

使用适用于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),并且您既不会忽略它们,也不会添加强制转换以使它们消失。如果你听它,编译器就是一个好朋友。

由于它不是每次都发生,这可能是与时间相关的,或者是一个未初始化的变量,它通常会在某个功能正常的值上浮动。