2012-04-22 8 views
0

アプリケーションベリファイアでデバッグしようとするまで、私のアプリは正常に動作していました。そして問題がPantheiosで「bailout.c」ファイル内にあるように見えます:パンテシオでのファーストチャンス例外

hFile = CreateFileA("logging-bailout.txt" 
       , GENERIC_WRITE 
       , 0 
       , NULL 
       , OPEN_ALWAYS 
       , 0 
       , NULL); <--- this is where it crashes, line 442 

とメッセージ:

:その後、私は、「無効なハンドルが指定された初回例外を...」入門しました
First-chance exception at 0x7769f8cd in myapp.exe: 0xC0000008: An invalid handle was specified. 


======================================= 
VERIFIER STOP 0000000000000300: pid 0x3814: Invalid handle exception for current stack trace. 

    00000000C0000008 : Exception code. 
    00000000111DE950 : Exception record. Use .exr to display it. 
    00000000111DE460 : Context record. Use .cxr to display it. 
    0000000000000000 : Not used. 


======================================= 
This verifier stop is continuable. 
After debugging it use `go' to continue. 

======================================= 

コンソールの前に、私がPantheiosに持っていた例外が記録されていました。私は本当に気にしませんでした。しかし、今Pantheiosを使ってログの最初の発生時にアプリがクラッシュすると、これに対処する時間ですが、どうすればよいか分かりません。

私Pantheiosを設定するとき、私は、このガイド従っていました:すべてのファイルでhttp://www.codeproject.com/Articles/27119/Using-Callback-Back-ends-with-the-Pantheios-Loggin

を私はソースファイルに次の行を持っているログを持っている:

#include <pantheios/pantheios.hpp> 
#include <pantheios/inserters/boolean.hpp> 
#include <pantheios/inserters/integer.hpp> 
#include <Shared/logs.h> 

logs.hは含まれています

#include <pantheios/implicit_link/core.h> 
#include <pantheios/implicit_link/fe.simple.h> 
#include <pantheios/implicit_link/be.WindowsConsole.h> 

また、ログを行う前にpantheios::init();とも呼ばれます。私は、Visual Studio 2010を使用していますし、 "追加の依存" の下で、次のlib-のファイルを含めている

は:

ファーストチャンス:

$(PANTHEIOS_ROOT)\lib\pantheios.1.core.vc10.mt.debug.lib 
$(PANTHEIOS_ROOT)\lib\pantheios.1.be.WindowsConsole.vc10.mt.debug.lib 
$(PANTHEIOS_ROOT)\lib\pantheios.1.fe.simple.vc10.mt.debug.lib 
$(PANTHEIOS_ROOT)\lib\pantheios.1.util.vc10.mt.debug.lib 

しかし、私のすべてのログは次のようになりますmyapp.exeの0x750bb9bcの例外:Microsoft C++の例外:メモリ位置0x1822bda0のstlsoft :: winstl_project :: windows_exception ..

20120423-104817.497:ログファイルへのメッセージの書き込みに失敗しました。以下のメッセージが表示されます。[myapp.Qt.Framework.13424、23/04/2012 10:48:17.496 a.m。デバッグ]:「いくつかのログ」

その後

pantheios::log(pantheios::debug, "some logging");を呼び出して、すべての私のログには、プロジェクトと同じフォルダに「救済」ファイルに書き込まれます。これは前に働いていましたが、それは私の「To-do-list」(しかし、他のものより少し下にある)で大きな弾丸でした。

ここで私の質問は、これをどのように修正するのですか?私が見つけることができるすべてのチュートリアルに続いて、成功なし。そして、私のアプリケーションがMs Application Verifierを実行した後にもうこれを受け入れないことにしたのはなぜですか?意味がありません。

答えて

2

First chance exceptionsは例外がスローされたことを意味します。これは、プログラムにバグがあることを意味するものではなく、例外がスローされていることをデバッガが表示しているので、コールチェーンの上に伝播される前に検証する機会があります。例外ハンドラによって例外がキャッチされた場合(たとえばロギングの場合)、アプリケーションが続行されます。そうでない場合、デバッガは処理されない例外によりアプリケーションが終了することを通知する2回目の例外通知を行います。

最初の例外通知を受信したくない場合は、デバッガで無効にすることができます。 This linkは、Application Verifierで例外処理をオフにする方法を助けるかもしれません。

この問題を回避するには、Application Verifierで例外テストを無効にします。これを行うには、次の手順を実行します。

1.Start Application Verifier

2.Under Applicationsで、テストするGDI +プログラムをクリックします。

3.テストの結果、基本を展開します。

4. [例外]チェックボックスをオフにします。

5.テストするGDI +プログラムを実行します。

アクセス違反が発生したときにデバッグツールでブレークポイントが発生しないように、デバッグツールを構成することもできます。

代替(MSVSで例外通知をオフにするには)経由で「デバッグ - >例外...」

また、それが可能である場合、例外が最初の場所でスローされないことを確認してください。例外の性質(ファイルが見つからないなど)を調べ、意図した操作を妨げている状態を修正する必要があります。

Application Verifierの性質/目的を考えれば、私は後者のアプローチを提案します:AVは以前はOKだった可能性のある不正なことが起こっていることを伝えていますが、等)

+0

ええ、私は今それを振りかえし、もうクラッシュしません。しかし、それは読みにくいので、私のログにはそのメッセージがありません。私はそれを取り除く方法をまだ理解できません。 – chikuba

+0

最初の例外メッセージはどのようにしてカスタムログに書き込まれますか?すべての例外をキャッチしてログに記録している場合は、特別にスローされた例外を特定して無視することができます。理想的な解決法は、最初に 'CreateFileA'を呼び出すときに例外につながる条件を修正することです。 – Attila

+0

は例外をログに記録しませんが、" 20120327-112911.994:ログファイルへのメッセージの書き込みに失敗しました。メッセージの始め。 – chikuba

関連する問題