ログ ファイルの情報
[このドキュメントはプレビュー版であり、後のリリースで変更されることがあります。 空白のトピックは、プレースホルダーとして挿入されています。]
次の操作の動作を記録するログ ファイル: 作成できます。
ネイティブ コード相互運用します。
プログラムの読み込み。
ネットワーク。
ログおよびログ ファイルを生成する方法を制御するレジストリ キーについては、方法 : ログ ファイルを作成します。 参照してください。
このトピックではログの相互運用機能とローダー ログ ファイルに書き込まれた出力説明します。
相互運用機能のログ ファイル
相互運用ログの出力は、エラー メッセージと、実行時に行われた、相互運用関数呼び出しのシグネチャを成ります。
.NET Compact Framework のバージョン 3. 5 では、このトピックで後述する 「深いマーシャリングの に記載されている拡張の相互運用ログ サポート、が含まれます。
関数の署名
ネイティブにマネージし、ネイティブからマネージへの呼び出しの署名はログに記録されますとは、次の種類呼び出しにはが含まれます。
プラットフォーム呼び出し。
COM の vtable と発信呼び出し。
コールバックを委任します。
相互運用ログできます呼び出しまたはが不適切なパラメーター型のマーシャリングときや、プログラムが予期せず終了時など、相互運用関数呼び出しから取得する際のトラブルシューティングします。
出力、関数シグネチャ エントリを相互運用呼び出しごとの 3 行から成ります。 最初の行は、関数呼び出しが行われるの種類を識別するフラグを提供され、次の要素のいずれかが含まれます。
[pinvokeimpl]
DllImportAttribute 属性を使用するネイティブにマネージ呼び出しを識別します。[Ctor]
Tlbimp.exe (タイプ ライブラリ インポーター) によって生成された、相互運用機能アセンブリ クラスのコンストラクターを識別します。[preservesig]
では、マネージ コードとネイティブ関数、ランタイムによって適用される例外を HRESULT からなし変換と、同じ署名を持つこと。[delegate]
関数がネイティブからマネージへのデリゲート コールバックことを示します。 デリゲートは、ネイティブ コードで関数ポインターとして機能します。
相互運用ログ ファイルの 2 番目の行は、マネージ シグネチャを表します。 ネイティブをマネージ関数の呼び出し、この行をネイティブ コードを呼び出すマネージ関数を示します。 ネイティブからマネージへの関数呼び出し、この行はネイティブ コードから呼び出されるマネージ関数を示します。
3 行目は、ランタイムによって期待どおりに、ネイティブの署名を表します。 この行各パラメーターのデータ型を識別され、マネージ オブジェクトのデータをマーシャリングする方法の情報。 DllImportAttribute 属性によってまたは COM インターフェイス署名定義で正しい種類を指定することを前提、ランタイムとしています。 正しい種類を指定するには、不適切なパラメーター値を持つ関数が実行されるため、予期しない現象、原因となる、一般的なエラーです。
注意
不適切なパラメーターの型指定可能性、NotSupportedException またはネイティブの例外があります。障害を特定するにはサポートされている既知の型にや、IntPtr にパラメーターの型を変更します。
すべての型には、既定の型のマーシャリングがあります。 マネージ型のマーシャリングの動作を COM 呼び出しおよび DllImportAttribute またはデリゲート コールバックの呼び出しに異なるされるできることに注意ください。 MarshalAsAttribute 属性を使用すると、既定以外のマーシャリング、種類を指定できます。 値型を指すポインターまたは参照型、ポインターへのポインターを表す任意のパラメーターを識別するのにもの ref キーワードを使用する必要があります。
プラットフォームの相互運用機能のログ呼び出しを次の表に示します。
行番号と説明 |
ログ エントリ |
---|---|
関数呼び出しの 1 種 |
[pinvokeimpl][preservesig] |
2 マネージ シグネチャ |
bool PlatformDetector::SystemParametersInfo(uint , uint , System.Text.StringBuilder , uint ); |
3 ネイティブ シグネチャ |
BOOLEAN (I1_WINBOOL_VAL) SystemParametersInfo(unsigned int (U4_VAL) , unsigned int (U4_VAL) , WCHAR * (STRINGBUILDER_LPWSTR) , unsigned int (U4_VAL) ); |
次の表は、デリゲート コールバックの相互運用機能のログです。
行番号と説明 |
ログ エントリ |
---|---|
関数呼び出しの 1 種 |
[preservesig][delegate] |
2 マネージ シグネチャ |
int WndProc::Invoke(WndProc , IntPtr , uint , uint , int ); |
3 ネイティブ シグネチャ |
int (I4_VAL) (*)(INT_PTR (I_VAL) , unsigned int (U4_VAL) , unsigned int (U4_VAL) , int (I4_VAL) ) |
次の表のネイティブからマネージへ COM 関数呼び出しの相互運用機能のログ記録が場所のランタイム失敗を返した HRESULT マネージ例外が発生した場合です。
行番号と説明 |
ログ エントリ |
---|---|
関数呼び出しの 1 種 |
(フラグなし) |
2 マネージ シグネチャ |
int N2MDualComponentImp.IN2MDualInterface::GetInt(N2MDualComponentImp.IN2MDualInterface This); |
3 ネイティブ シグネチャ |
HRESULT GetInt(IN2MDualInterface *(INTF_VAL) this, [retval] int (I4_VAL) retval); |
深いマーシャリング
.NET Compact Framework バージョン 3. 5 では、相互運用ログの深いマーシャリングもサポートします。 深いマーシャリング、または参照型の構造体に含まれるマーシャリングされたオブジェクトに関する情報が記録されます。
プラットフォームの例に次のログ出力示します呼び出し構造体に含まれるマーシャリングされたオブジェクトを使用します。 セクションをマーシャリング深さの 1 行目、深いマーシャラーが呼び出された理由を指定します。 この例では、それが構造体のサイズを計算する呼び出されました。 ログは、データ型と、サイズを示していますオブジェクトごとのバイト単位。 インデックス値 (たとえば、0004) は指定された変数のバイト オフセットを表します。
DEEP MARSHAL: Get size
struct interoplogging.MyStruct
{
0000: Int32 myVar as Int32 (4 bytes)
0004: Int32 myVar2 as Int32 (4 bytes)
0008: String myString as WCHAR[10] (20 bytes)
}
DEEP MARSHAL: Total size = 28 bytes
[pinvokeimpl][preservesig]
void interoplogging.Form1::MyAPI(interoplogging.MyStruct );
void MyAPI(MyStruct (NONBLIT_VALUETYPE_VAL) );
DEEP MARSHAL: Managed -> Native
struct interoplogging.MyStruct
{
0000: Int32 myVar as Int32 (4 bytes)
0004: Int32 myVar2 as Int32 (4 bytes)
0008: String myString as WCHAR[10] (20 bytes)
}
DEEP MARSHAL: Total size = 28 bytes
エラー メッセージ
一部の状況や例外には、ログ ファイルに記録するエラー メッセージを入れことができます。 これらのメッセージは、ネイティブ コンポーネントや DLL をネイティブのソース コードは使用できませんとの相互運用に関連する問題を調査するときに特にときに便利です。 エラー メッセージを使用して、次の問題に利用することができます。
ネイティブからマネージへの関数呼び出しです。
ランタイム COM インターフェイスの呼び出し。 HRESULT エラーは、ランタイムによって実装されている、COM インターフェイス関数が呼び出されたときネイティブ コードに返すことができます。 いくつかランタイム実装インターフェイスは (含む IUnknownIDispatch、 IConnectionPointContainerIEnumConnectionPoints、や IConnectionPoint) を COM インターフェイスとしてマーシャリングするマネージ オブジェクトを使用してネイティブ コードを呼び出すことができます。 関数の呼び出しでは、エラーをネイティブ コードにこれらのインターフェイスのいずれかに戻る、ときに、ランタイムは、適切なエラー メッセージ、HRESULT および関連する追加情報を含むによって出力します。
ネイティブ コードが IDispatch::GetTypeInfo など、サポートされていない機能を使用する要求です。
実装されていないインターフェイスです。 ネイティブ コードに E_NOINTERFACE エラー IUnknown::QueryInterface が、他のインターフェイスを実装するマネージ COM オブジェクトを受け取ることから発生ことがあります。 ここでは、実装されていないインターフェイスの GUID も提供されます。
マネージ例外。 マネージ関数呼び出しの内部発生し、途中で取得するこれらことができます。 COM の呼び出しを行う場合、ランタイム エラーの HRESULT 値をネイティブ コードに返されますに、例外を変換します。 ただし、COM 呼び出しをデリゲート コールバックを HRESULT 戻り値を予期しない場合、できない確認するは、エラーを認識できなくなるし、予期しない動作が結果として表示します。 相互運用ログは例外がネイティブからマネージへの相互運用関数呼び出し中に発生すると、エラー メッセージには。 このメッセージを使用するとネイティブ コードでうまく機能する追加のエラー処理ロジックが必要なマネージ関数を識別できます。 次の要素は、マネージ例外は発生ことができます。
.NET Compact Framework によってサポートされていない COM インターフェイスの定義または DllImportAttribute のシグネチャで型を使用、JIT コンパイル プロセス中に発生する例外がします。 IntPtr を使用するなど、受け入れられる代替オプションがよくあります。
実際のオブジェクトできません、シグネチャで指定した型に強制変換するか、要求された種類にオブジェクトのデータを変換できません、関数が呼び出されると実行時に、例外がスローされます。 これは通常、ネイティブ オブジェクトをマネージ オブジェクトに変換するときに発生します。
ランタイム呼び出し可能ラッパー (RCW) を作成するか、COM 呼び出し可能ラッパー (CCW) が困難なときに、例外原因を決定します。 相互運用機能のログ ファイルにマネージ例外と、詳細なエラー メッセージが提供されない場合にこれらの問題の原因を判断に役立ちます。
.NET Framework に相違点
COM 相互運用性の .NET Compact Framework の実装および .NET Framework の違いがあります。 .NET Compact Framework で、以下はサポートされません。
GUID を指定せず、インターフェイスを格納する CCW を作成します。
相互運用機能アセンブリ、クラスから継承するクラスの RCW を作成します。
ジェネリック メソッド非ジェネリック インターフェイスを保持する CCW を作成します。
RCW はファイナライズ、時にクリーンアップは、通常がオブジェクトに関連付けられている RCW を解放するも、ReleaseComObjectFinalReleaseComObject メソッドを使用できます。 これらの高度なオプションを使用して、オブジェクトの有効期間を管理するオブジェクトは、ネイティブ COM 呼び出しを行うが解放された後に使用しようとする、例外がスローされ、ログ ファイルに、例外の原因について、エラー メッセージが含まれます。
ローダー ログ ファイル
ローダー ログ ファイルは、2 つのセクションで構成されます。ヘッダーと本文。 ログ ファイルのヘッダーは、次データを含みます。
アプリケーションのメイン実行可能ファイルの名前。
プロセス ID、オペレーティング システムによって割り当てられたとします。
ログ ファイルが作成された日時です。
アプリケーションの実行に使用された .NET Compact Framework のバージョン。
アプリケーションが実行されているプラットフォームに関する情報。
ログ ファイルの本文が、アプリケーションによって読み込まれるとの各アセンブリの診断情報があります。 この情報は、アプリケーションを起動すると、クラス ローダーによって発生したエラーを見つけることに役立ちます。
ログ ファイルの本文には、次のデータが含まれます。
強制変換状態は、下位互換モードで、アプリケーションが実行するかどうかを示します。
各アセンブリの読み込み、アセンブリから読み込まれた場所およびバージョンが読み込まれたなどをトレースします。
信頼レベルが読み込まれると、各モジュールに割り当てられました。
アプリケーションに関連付けられた構成ファイル。
メソッド、型、アセンブリ、およびモジュールの検索に失敗しました。
呼び出しをプラットフォームのネイティブ DLL をまたは関数を検索に失敗しました。
次の表は、ローダー ログ ファイルの例を示します。 行番号は概算です。
行番号と説明 |
ログ エントリ |
---|---|
1 プロセス |
Process [\Program Files\VW\VW.exe] |
2 のプロセス ID |
Process ID [0x4d9585d2] |
3 日 |
Date [2005/02/25] |
4 時間 |
Time [18:33:14] |
5 .NET コンパクト Framework のバージョン |
NETCF [2.0.5035.00] |
6 プラットフォーム |
Platform [Windows CE v4.20.1081 (PocketPC) WinCE4ARMV4 release Beta2 ARMV4 IJITv2] |
7–14 - グローバル アセンブリ キャッシュの操作 |
GAC: Updating GAC [0x0] GAC: Checking .gac files inside [\Windows\] GAC: Found [Microsoft .NET CF 2.0.GAC] .gac file. GAC: Done with the file system check. Checking the registry. GAC: Found [Microsoft .NET CF 2.0.GAC] registry entry. GAC: Done with the registry check. Let's compare. GAC: Entry [Microsoft .NET CF 2.0.GAC] is up to date. GAC: GAC is up to date. |
15 互換モード (0.0.0.0 は互換モードではなくを示します) |
Compatibility mode [0.0.0.0] |
16 読み込みモジュール |
Loading module [\Windows\GAC_mscorlib_v2_0_0_0_cneutral_1.dll] |
17 読み込まれたモジュール |
Loaded [mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=969DB8053D3322AC] from [\Windows\GAC_mscorlib_v2_0_0_0_cneutral_1.dll] |
(読み込みと読み込み) は、最後の 2 つのエントリは、各モジュールの記録されます。 アセンブリとその場所を特定とします。 モジュールを読み込んでから、エラーは、ローダー ログに示されます。
エラーの例
このセクションで 2 つの例は、ローダー ログ ファイルを使ってエラーが発生したときを決定する方法示しています。
次にこれローダーでアセンブリが見つからないときに書き込まれるログ エントリ例です。
Loading module [\Program Files\VW\Golf.dll]
Attempt to load [\Program Files\VW\Golf.dll] has failed (err 0x80001000).
Loading module [\Program Files\VW\Golf.exe]
Attempt to load [\Program Files\VW\Golf.exe] has failed (err 0x80001000).
Failed to load [Golf, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]
次の例、ローダーは、特定の種類が見つからないときに書き込まれるログのエントリに示します。
Missing Type. Type [Cars.Jetta], Assembly [Cars].
Missing Type. Class [Cars.Jetta], Assembly [Cars, Version=5.0.0.0,
Culture=neutral, PublicKeyToken=null].
参照
処理手順
概念
.NET コンパクトなフレームワーク方法を説明したトピックの検索