相关疑难解决方法(0)

如何调试堆损坏错误?

我在Visual Studio 2008下调试一个(本机)多线程C++应用程序.在看似随机的场合,我得到一个"Windows触发了一个断点......"错误,并注意到这可能是由于堆.这些错误并不会立即使应用程序崩溃,尽管它很可能会在之后崩溃.

这些错误的一个大问题是它们只在实际发生损坏后弹出,这使得它们很难跟踪和调试,尤其是在多线程应用程序上.

  • 什么样的事情会导致这些错误?

  • 我该如何调试它们?

提示,工具,方法,启发......欢迎.

c++ windows debugging heap

162
推荐指数
8
解决办法
17万
查看次数

程序只会崩溃作为发布版本 - 如何调试?

我这里有一个"Schroedinger's Cat"类型的问题 - 我的程序(实际上是我的程序的测试套件,但是程序仍然是)崩溃,但只有在发布模式下构建时才会发生,并且只有在从命令行启动时.通过穴居人调试(即整个地方讨厌的printf()消息),我已经确定了代码崩溃的测试方法,但遗憾的是实际的崩溃似乎发生在某些析构函数中,因为我看到的最后一条跟踪消息都在其他执行干净的析构函数.

当我尝试在Visual Studio中运行此程序时,它不会崩溃.从WinDbg.exe启动时也是如此.仅从命令行启动时才会发生崩溃.这是在Windows Vista,btw下发生的,不幸的是我现在无法访问XP机器进行测试.

这将是非常好的,如果我能得到的Windows打印出堆栈跟踪,或一些其他不是简单地结束,如果它已经退出干净方案.有没有人对如何在这里获得更有意义的信息有任何建议,希望能解决这个问题?

编辑:问题确实是由一个越界数组引起的,我在这篇文章中对此进行了更多描述.感谢大家帮忙找到这个问题!

c++ debugging

88
推荐指数
7
解决办法
7万
查看次数

找到最后释放内存的位置?

非常一般: 当发生访问冲突时,是否有一种简单的方法可以告诉哪一行代码最后释放了一块内存?

不太通用: 我对剖析器的理解是它们覆盖了分配和释放过程.如果这是真的,他们可能会碰巧存储最后释放一段内存的代码行,这样当它因为访问冲突而后来崩溃时,你知道最后释放它的是什么吗?

细节: Windows,ANSI C,使用Visual Studio

c memory debugging profiler

4
推荐指数
1
解决办法
1671
查看次数

当我连接调试器/ IDE时,为什么我的STL代码运行得如此之慢?

我在Windows Vista Business x64,四核机器,8gb ram上使用Visual Studio 2008 SP1运行以下代码.

如果我构建一个发布版本,并从命令行运行它,它报告31ms.如果我然后从IDE启动它,使用F5,它报告23353ms.

以下是时间:(所有Win32版本)

  • DEBUG,命令行:421ms
  • 来自IDE的DEBUG:24,570ms
  • RELEASE,命令行:31ms
  • 发布,来自IDE:23,353ms

码:

#include <windows.h>
#include <iostream>

#include <set>
#include <algorithm>
using namespace std;

int runIntersectionTestAlgo()
{   

    set<int> set1;
    set<int> set2;
    set<int> intersection;


    // Create 100,000 values for set1
    for ( int i = 0; i < 100000; i++ )
    {
        int value = 1000000000 + i;
        set1.insert(value);
    }

    // Create 1,000 values for set2
    for ( int i = 0; i < 1000; i++ )
    {
        int …
Run Code Online (Sandbox Code Playgroud)

c++ ide performance stl visual-studio

4
推荐指数
1
解决办法
5805
查看次数

标签 统计

c++ ×3

debugging ×3

c ×1

heap ×1

ide ×1

memory ×1

performance ×1

profiler ×1

stl ×1

visual-studio ×1

windows ×1