程序简单,没有调用堆栈,"inpossible"查找错误
Simple program, no callstack, "inpossible" to find error
当我在我的工作机器上运行时(win7 VS2010终极sp1)
int main()
{
unsigned i = 5;
i %= 0;
return 0;
}
或
int main()
{
int * ip = 0;
*ip = 4;
return 0;
}
我得到整数除以零未处理的异常。当我点击break按钮时,为了查看问题,我的调用堆栈只包含msvcrt100d和ntdll,Visual studio在LeaveCriticalSection( _locktable[locknum].lock );
行的文件mlock.c
中打断了我。
当我在另一台机器(win7VS2010proff sp1)上运行此代码时,VS会在有问题的行i %= 0;
od*ip = 4
上完全中断它。
这个错误隐藏在我的项目中,直到我在另一台机器上运行它,我才找到它。如何修复此行为?我需要在我的工作机器上看到它。
我有一个干净的安装Windows7,干净的安装Visual Studio 2010和VS-SP1。我的项目不应该被破坏。我使用CMake生成它,并且同一项目在非工作机器上运行良好。
如有任何建议,我们将不胜感激。
好的,我找到了一个解决方案。
在VS中,转到异常设置(ctrl+alt+e),并在所需的Win32异常中检查Thrown
。
可以找到更多信息这里和这里。
这里有SO相关的问题。
使用VS编译程序时,它会创建EXE文件和PDB文件,其中包含程序的所有相关调试信息。此外,如果嵌入EXE,则PDB的绝对路径。
当EXE崩溃并且您使用VS调试它时,它会尝试在与EXE相同的文件夹中以及嵌入文件中的绝对路径中找到相应的PDB。如果您希望它能够调试程序,那么您必须将PDB与EXE一起复制。请注意,这两个文件必须来自完全相同的编译,否则将无法工作。
然后,VS调试器将再次使用PDB中嵌入的*.c
或*.cpp
文件的绝对路径,尝试向您显示程序的源代码。显然,如果你想让它停在相关的行中,你需要一份来源的副本!如果将源复制到与原始机器中的路径完全相同的路径,它应该可以正常工作。如果没有,您必须打开调用堆栈窗口,双击main
函数,它会要求您浏览实际的源。
或者你的设置搞砸了。。。
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 程序简单,没有调用堆栈,"inpossible"查找错误