我从Visual Studio 2k3中使用C ++编写的应用程序中获取了错误的数据,所以我决定调试它。然后我发现它抛出一个异常,但是我无法追踪它。
然后我放置了一些try / catch块并且低,看,当我不调试时没有异常。也就是说,我的代码看起来像这样:
std::vector<MyClass*> ListOfStuff;
.
.
.
try
{
.
.
.
const MyClass * localPointer = ListOfStuff[i]; //This is where the exception occurs
.
.
}
catch (...)
{
int x = 0; //place break here
}
因此,如果我逐行逐步执行代码,我将获得一个异常并向catch捕获。但是,如果我只是让它在一个断点内运行捕获没有任何反应。使用迭代器具有相同的行为。我可以成功检查向量的大小,所以我知道我在界限内。
答案 0 :(得分:2)
您可以尝试放置
DebugBreak();
调用catch
子句。如果应用程序在调试器中运行,它应该得到控制。如果它没有在调试器中运行,你应该有机会附加“Just in Time”调试器(如果安装了它,通常是Visual Studio)。
答案 1 :(得分:1)
例外是ASSERT吗?这些可能会在编译时编译出来或以其他方式抛出断言。
例如,您可以
#ifdef DEBUG
#define ASSERT(cond) if (cond) throw CDebugAssertionObj;
#else
#define ASSERT(cond)
#endif
答案 2 :(得分:1)
我指的是VS2005,但它应该适用于您的情况。如果您访问IDE 调试&gt; 例外.. 菜单项您可以指定IDE调试器在抛出时应该中断的异常类型,这会导致您在单步执行时看到引发异常的行通过申请。
您可能需要了解要捕获的类型(第一次机会异常实际上不是问题),但它有助于确定引发异常的点。
答案 3 :(得分:0)
如果您正在使用一个允许条件断点的好IDE(例如,“如果i == 5”则中断此处),则条件本身可能导致异常。
那个人一会儿......当我找到它时,我的头部受伤了。
答案 4 :(得分:0)
该代码是否是类方法的一部分,并且ListOfStuff
是该类的成员?如果是,请检查以确保您的this
指针有效。