2

当我在我的工作机器上运行时(win7 VS2010 Ultimate sp1)

int main()
{
    unsigned i = 5;
    i %= 0;
    return 0;
}

或者

int main()
{
    int * ip = 0;
    *ip = 4;

    return 0;
}

我得到整数除以零未处理的异常。当我点击中断按钮时,为了查看问题,我的调用堆栈只包含 msvcrt100d 和 ntdll,而 Visual Studio 将我的内部文件中断mlock.cLeaveCriticalSection( _locktable[locknum].lock );行了。

当我在另一台机器(win7 VS2010 proff sp1)上运行此代码时,VS 在有问题的行i %= 0;od上完全中断了它*ip = 4

这个错误隐藏在我的项目中的某个地方,直到我在另一台机器上运行它才能找到它。我该如何解决这种行为?我需要在我的工作机器上看到它。

我有 Windows 7 的全新安装,Visual Studio 2010 和 VS-SP1 的全新安装。我的项目不应该被毁掉。我使用 CMake 生成它,并且相同的项目在非工作机器上运行良好。

任何建议将不胜感激。

4

2 回答 2

1

好的,我找到了解决方案。

在 VS 中转到异常设置 (ctrl + alt + e) 并检查Thrown所需的 Win32 异常。

更多信息可以在 这里这里找到。

SO相关问题在这里

于 2013-02-20T15:44:36.737 回答
0

当你用 VS 编译一个程序时,它会创建一个 EXE 文件和一个 PDB 文件,其中包含程序的所有相关调试信息。此外,如果嵌入到 EXE 中,则为 PDB的绝对路径。

当 EXE 崩溃并且您使用 VS 对其进行调试时,它会尝试在与 EXE 相同的文件夹中以及文件中嵌入的绝对路径中查找相应的 PDB。如果您希望它能够调试程序,则必须将 PDB 与 EXE 一起复制。请注意,这两个文件必须来自完全相同的编译,否则将无法正常工作。

然后,VS 调试器将尝试向您显示程序的源代码,再次使用嵌入在 PDB中的*.c或文件的绝对路径。*.cpp显然,如果你想让它停在相关行,你需要一份源代码的副本!如果您将源复制到与原始机器相同的路径,它应该可以正常工作。如果没有,您必须打开调用堆栈窗口,双击该main函数,它会要求您浏览实际源。

或者也许你的设置被搞砸了......

于 2013-02-20T15:36:32.117 回答