使用OpenSceneGraph,我一直遇到这个违规问题,我将不胜感激。问题在于下面的特定行恰好是我主要功能中的第一行。
osg::ref_ptr<osg::Node> bench = osgDB::readNodeFile("Models/test.IVE");
我的模型文件夹位于我的目录中。错误如下。
OSG3D.exe中0x68630A6C(msvcr100.dll)的未处理异常:0xC0000005:访问冲突读取位置0x00421000。
这就是问题似乎即将到来的地方。
/** Read an osg::Node from file.
* Return valid osg::Node on success,
* return NULL on failure.
* The osgDB::Registry is used to load the appropriate ReaderWriter plugin
* for the filename extension, and this plugin then handles the request
* to read the specified file.*/
inline osg::Node* readNodeFile(const std::string& filename)
{
return readNodeFile(filename,Registry::instance()->getOptions());
}
我希望将来能够最好地解决此类异常消息的详细信息。是否有工具可以轻松调试或有方法捕获确切的问题并修复它们?我很感激任何帮助。
我的最终目标是学习如何更好地调试C ++相关问题。有了它,这意味着通过编译器错误列表http://msdn.microsoft.com/en-us/library/850cstw1(v=vs.71).aspx读取是不够的
答案 0 :(得分:1)
经过测试,发现
因此,只需使用debug osg lib进行调试构建,然后发布版本进行发布构建,完成。
答案 1 :(得分:0)
我通过使用Application Verifier(来自Microsoft)等工具解决类似问题,祝你好运。 GFlags和类似的工具也很好。
Application Verifier安装简单,然后将其指向您的exe并在Visual Studio中运行该应用程序。当问题发生时,它将破坏发现问题的应用程序。这可能是也可能不是问题的确切位置(虽然我在第一次开始的时候有好运,但是应该更容易看到可能发生的事情。
你能打开这个程序吗? Microsoft将其安装在C:\ Windows \ System32 \ appverif.exe中。运行它时,选择文件以及要调试的内容。在您的情况下选择内存相关的选项。激活App Verifier,它应该告诉您现在应该在Visual Studio中运行它。因此,在Visual Studio中运行程序,App Verifier应该有助于在发生错误(或附近)的位置停止程序。 Google for Application Verifier。有一些很好的教程。
答案 2 :(得分:0)
请执行以下问题排查:
检查Model文件夹的位置,假设您应该将它复制到debug或release文件夹下,因为它们是默认的执行路径。
在读取节点文件之前添加一些保护代码,在阅读之前必须确保该文件存在。
直接构建ReaderWriter :: Options并替换Registry :: instance() - &gt; getOptions()并查看问题是否仍然存在。
我认为按合同设计可以避免大部分此类问题。