我一直在尝试调试大型项目中的细微内存问题。已经好几周了,我仍然无法找到它。我的程序在运行一段时间后随机崩溃。结果,我一直在尝试获得各种内存调试器。以下是我考虑/尝试的选项:
我在Google上搜索了所有这些错误数小时无济于事。这些软件包的相应文档似乎没有关于我的特定问题的信息。那里有调试器吗?我真的必须将我的程序移植到Linux吗?有人能指出我关于内存调试的良好文档的方向吗?任何帮助将不胜感激。提前谢谢!
编辑:
感谢所有回复。我意识到崩溃问题可能不是内存泄漏。运行一段时间后,它就冻结了。没有错误消息。通常它会在写给cout时发生。所以我认为这是某种内存损坏。我想我会研究视觉工作室的更深入的功能。实际上使用Purify的试用版我发现了一些错误,但我不想为完整版本咳嗽1600美元。最糟糕的情况我将它移植到Linux。再次感谢您的帮助。
编辑2:
使用Purify进行一些测试之后,我的程序似乎没有任何更多的内存错误。我注意到当我点击它时程序会冻结,就像命令提示本身一样。因此,我将假设它不是我的代码的问题,而是它与选择文本交互的方式。 (编辑2a:选择应该这样做 facepalm )再次感谢所有帮助。
为了将来参考,我在哪里可以了解更复杂的调试?我使用了断点并观察表达,但在学校他们只教语言本身。我需要学习x86汇编吗?
答案 0 :(得分:3)
Visual Studio在C库的调试版本中包含内存泄漏检测。有关信息,请参阅this page on MSDN。
但是你似乎不确定崩溃是由于内存泄漏造成的。事实上,内存泄漏通常不会导致崩溃(除非发生崩溃,因为系统完全没有内存运行)。你很可能有泄漏,但这些可能与崩溃无关。
您是否尝试使用VS调试器查看崩溃?很多时候,这会让您了解您面临的问题。如果你遇到崩溃我怀疑你更有可能破坏内存,例如通过写一个已分配内存块的结尾,或者在内存释放后使用内存。
This article对如何处理内存问题有一些想法,this page列出了一些免费和商业内存调试器,其中一些不在您的列表中。
祝你好运。答案 1 :(得分:1)
我使用可视检漏仪。它会检测内存泄漏并为您提供调用堆栈。它适用于visual studio,非常可靠。你可以从这里开始 - http://vld.codeplex.com/
我不知道这是否正是您所寻找的,但它很有用。
答案 2 :(得分:1)
答案 3 :(得分:1)
也许Gdb和Valgrind已被移植到Windows?
如果您的应用程序不是特定于Windows,或者使用已在Windows和Linux上移植的库(例如Qt),您可以考虑在Linux上进行调试。