1

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を読むだけでは不十分であることを意味します。

4

3 に答える 3

0

私は、Application Verifier(Microsoft製)などのツールを使用して、同様の問題を解決することができました。GFlagsや同様のツールも優れています。

Application Verifierは簡単にインストールできます。次に、それをexeにポイントして、VisualStudioでアプリケーションを実行します。問題が発生すると、問題が見つかったアプリケーションが破損します。これは、問題が発生する正確な場所である場合とそうでない場合があります(ただし、最初に問題が発生した場所で幸運に恵まれました)が、何が起こっているのかを確認する方が簡単なはずです。

プログラムを開くことができましたか?MicrosoftはそれをC:\ Windows \ System32\appverif.exeにインストールします。それを実行するときは、ファイルとデバッグするものを選択します。あなたの場合、メモリ関連のオプションを選択してください。App Verifierをアクティブにすると、VisualStudioで実行する必要があることが通知されます。したがって、Visual Studioでプログラムを実行すると、App Verifierは、エラーが発生した(または近くにある)場所でプログラムを停止するのに役立ちます。Google forApplicationVerifier。いくつかの素晴らしいチュートリアルがあります。

于 2012-11-29T23:41:59.447 に答える
0

次のトラブルシューティングを行ってください。

  1. Model フォルダがどこにあるかを確認します。デフォルトの実行パスであるため、debug または release フォルダの下にコピーする必要があるとします。

  2. ノードファイルを読み取る前に保護コードを追加します。ファイルを読み取る前に、ファイルが存在することを確認する必要があります。

  3. ReaderWriter::Options を直接構築し、Registry::instance()->getOptions() を置き換えて、問題が解決しないかどうかを確認します。

そして、この種の問題のほとんどを回避するには、Design by Contract が良いと思います。

于 2012-12-04T04:55:33.007 に答える