使用OpenSceneGraph时,我会一直遇到这个违规问题,我希望能得到一些帮助。问题在于下面这一行恰好是我主要功能中的第一行。
osg::ref_ptr<osg::Node> bench = osgDB::readNodeFile("Models/test.IVE");
我的模型文件夹就在我的目录里。错误如下所示。
在OSG3D.exe: 0xC0000005:访问冲突读取位置0x00421000.中0x68630A6C (msvcr100.dll)处未处理的异常
这就是问题出现的地方。
/** 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是不够的。
发布于 2013-12-03 11:26:04
经过测试,我们发现
因此,只需使用调试osg进行调试构建,发布版本用于发布构建,即可完成。
发布于 2012-11-29 23:41:59
我很幸运地通过使用诸如Application (来自微软)之类的工具来解决类似的问题。GFlags和类似的工具也很好。
应用程序验证程序安装简单,然后将其指向您的exe并在Visual中运行应用程序。当问题发生时,它将在发现问题的地方破坏应用程序。这可能是也可能不是问题发生的地方(虽然我在刚开始的时候就幸运地着陆了),但应该更容易看到可能发生的事情。
你能打开这个节目吗?微软将其安装在C:\Windows\System32\appverif.exe中。运行它时,可以选择文件以及要调试的内容。在您的情况下,请选择与内存相关的选项。激活,它会告诉您现在应该在Visual中运行它。因此,在Visual中运行您的程序,应该有助于在错误发生的位置(或附近)停止您的程序。谷歌应用程序验证器。有一些很好的教程。
发布于 2012-12-04 04:55:33
请执行下列故障排除:
我认为合同式设计是避免大多数此类问题的好办法。
https://stackoverflow.com/questions/13265819
复制相似问题