2

本番サーバーでSqliteを使用していますが、デッドロックシナリオに陥っています。System.Data.Sqlite.org dllをデバッグモードでコンパイルしましたが、デッドロックは解消されました(もちろんそうなりました)。

さて、デバッグモードでコンパイルされているので、時々アサーションエラーが発生します。これらはどうやらダイアログとして表示され、どこにもログに記録されませんか?

おそらくDebugDiagまたは別のツールを使用して、アサーションの失敗が発生したときにメモリダンプを作成する方法はありますか?

4

2 に答える 2

2

アプリケーションのDebugDiagクラッシュルールを作成し、式を使用してブレークポイントを追加します

MSVCR90D!_wassert

cassertで定義されたプレーンアサートマクロをキャッチし、

MSVCR90D!_CrtDbgReport

MicrosoftデバッグCRT_ASSERT、_ASSERTEマクロをキャッチするには、

MSVCR90D!_CrtDbgReportW

Unicodeを有効にしてコンパイルする場合。

Ntdll!ZwTerminateProcessのブレークポイントを追加し、アサーション失敗ダイアログで中止を押し、生成されたログ(c:\ Program Files \ DebugDiag \ Logs \ <プロセス名>)のスタックトレースを確認することで、必要な式を見つけることができます。

「中止、再試行、無視」ダイアログコールを取り除くには

_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG);

アプリケーションの起動時のどこか( MSDNの_CrtSetReportModeの詳細な説明を参照してください)。残念ながら、これは_ASSERT、_ASSERTEマクロでのみ機能し、_wassert関数はこれらの_Crtモード設定とカスタムフックを完全にスキップします。

ノート:

  1. MSVCR90Dは、Visual Studio 2008に付属するCRTのライブラリ名です(VS2010の場合はMSVCR100Dになります)。

  2. DebugDiagに変更を加えるには、アプリケーションを直接(Explorerから、またはVisual Studioの[デバッグなしで開始]から)実行する必要があります。

于 2012-06-15T19:19:40.087 に答える
1

MiniDumpWriteDumpを使用します:http://msdn.microsoft.com/en-us/library/windows/desktop/ms680360%28v=vs.85%29.aspx適切なフラグを設定して、関連するすべての情報を投げ捨てる。

レジストリキーを設定することでWindowsにこれを行うように指示することができ、adplusとprocdumpがあります。関連する質問を参照してください:クラッシュ生成ダンプおよびこれ:アンマネージコードクラッシュでダンプを生成しますか?

于 2012-06-15T19:23:04.960 に答える