web-dev-qa-db-ja.com

コールスタックの「外部コード」とはどういう意味ですか?

Visual Studioでメソッドを呼び出し、コールスタックを調べてデバッグを試みます。

その中のいくつかの行は「外部コード」とマークされています。

これはどういう意味ですか? .dllのメソッドが実行されましたか?

ばかげた質問;しかし、明確な答えが必要です。

30
Simon Kiely

symbol informationが現在Visual Studio Debuggerで利用できない行です。つまり、Debuggerは実行された行からコードを取得できません。

シンボル情報のダウンロードや設定ができるのでcurrentlyと書いた。

詳細については、こちらをご覧ください。 方法:シンボルの場所と読み込み動作を指定する

13
Tigran

[外部コード]は、そのdllに利用可能なデバッグ情報がないことを意味します。

あなたができることはCall Stackウィンドウでマウスの右ボタンをクリックすることです。次にShow External Codeを選択すると、[外部コード]が展開され、呼び出されているモジュールが表示されます。

enter image description here

展開すると、呼び出されているDLLが表示され、Symbol Load Information...をクリックしてディスク上の場所を取得できます。

enter image description here

ディスク上の場所を示すダイアログが開きます

enter image description here

これらの外部ファイルをデバッグする場合は、dllの.pdbファイルを取得し、.dllと同じフォルダーに配置する必要があります。

これにより、Load symbols(上のスクリーンショット2のメニューSymbol Load Information)を使用してデバッグを開始できるようになります。

ここで.pdbファイルを取得する方法の詳細

これが生成されるEF .pdbの実際の例です

これにより時間を節約できることを願っています。

32

「外部コード」という表記は、「マイコード」に属さないすべてのものを指します。

これは、MSDNのドキュメントで説明されている方法です 方法:コールスタックウィンドウを使用する

マネージコードでは、デフォルトで。呼び出しスタックウィンドウは、非ユーザーコードの情報を非表示にします。 >非表示の情報の代わりに、次の表記が表示されます。

<[外部コード]>

非ユーザーコードは、「マイコード」以外のコードです。`

Your Codeは、自分が書いたすべてのことを自分で考えたかもしれません。したがって、この定義では、外部dllに属するすべてがコールスタックのトレースで省略されます。

さらに How to:Step Into Just My Code によると、デバッガがユーザー以外のコードをトレースすることを拒否する可能性があります。

ここに何の説明がありますuser code実際には:

ユーザーコードと非ユーザーコードを区別するために、Just My Codeは、DBGファイル、PDBファイル、最適化の3つを調べます。

4
marc wellman

これらの行は、現在ロードしているデバッグシンボルでは参照されません。

このコードは、外部DLLの一部である場合と、CLR内のネイティブコードである場合があります。どのモジュールであるかがわかっていて、それらのデバッグシンボルがある場合は、それらをVisual Studioに手動でロードできます。

1
Polynomial

コード/シンボルがないメソッド。 .NETフレームワークやサードパーティのアセンブリと同様です。

0

[デバッグ]メニューの[プロセスにアタッチ]アクションを使用して、ホストアプリの実行中のインスタンスをデバッグできます。 (実行中のプロセスにはデバッグシンボル.pdbファイルがあります)。

0
Aghilas Yakoub