2012-01-10 20 views
2

C/C++/MFCデスクトップアプリケーションで、C++/CLIアセンブリがいくつかのマネージコード機能にアクセスできるアプリケーションがあります。アプリケーションがリリースモードでメッセージでのみ起動するとクラッシュする混在コードアプリケーションの起動時の問題のデバッグ

未知のモジュールで 'System.TypeInitializationException'型の未処理の例外が発生しました。 追加情報: ''の型初期化子が例外をスローしました。

このシナリオをデバッグするにはどうすればよいですか、管理/非管理コードを混在させる際の問題は何ですか?彼らをうまくプレイさせるためには、特別な措置が必要ですか?

+3

[デバッグ] - > [例外]に移動し、[共通言語ランタイム例外]の[スロー]をオンにします。 –

+0

また、デバッガに添付されている場合は、混在モードのデバッグ(ネイティブとマネージドの両方)を使用していることを確認してください。デバッガから起動する場合、設定は[プロジェクトのプロパティ] - > [設定のプロパティ] - > [デバッグ] - > [デバッガの種類]にあります。あなたが付いているならば、あなたが指定することができる "選択"ボタンで "Attach to"があります。あなたは.NET 4または.NET 2を使用していますか? –

+0

問題は、この問題はリリースモードでのみ現れます。 –

答えて

0

疑わしいもの:

アンマネージドDLLがありません。 Depends(Sysinternalsから)を使用してプロファイリングを開始できますが、私は混在モードで良い結果を得るために苦労しています。

同じ依存関係を持つネイティブな最小テストハーネスを作成し、それをDependsで実行します。欠落しているDLLについての決定的な情報が得られます。

リリースビルド製品で難読化を使用していますか? 私たちが使用する難読化ソフトウェアは、評価モードでタイプにフィールドを追加します。オフセット構造体は固定されていますが、新しいフィールドには明示的なオフセットはありません。これは、コンパイル時に私たち自身のコード内にあった場合に警告されるエラーです。難読化ツールはアセンブリに動的にパッチを適用しているため、CLRにはオプションがありませんが、実行時に無効な型のロードに失敗します。

0

私の意見では(私が持っていたいくつかの問題に基づいて)Matt Smithのコメントは最も役に立つ答えです。実際には、すべてのタイプの例外に対して「Thrown」をチェックしてください。多くの場合、問題はグローバルオブジェクトのコンストラクタのクラッシュです。 - >例外とすべてのチェックボックスのチェックにスローされます

デバッグ]をクリックしてください:5(他のものの間で)言うた

http://www.codeproject.com/Questions/67419/The-type-initializer-for-threw-an-exception

で答えるも参照してください。この は、すべてのファーストチャンス例外でデバッガを停止させ、 が表示されているタイプイニシャライザエラーでエラーを見つけるのに役立ちます。 私のように別のアセンブリに関連している場合、 は、Microsoftのアセンブリバインディングログビューアツールを使用して、 の問題を特定するのに役立ちます。

関連する問題