ランタイム デバッガ (Cordbg.exe)

ランタイム デバッガは、.NET Framework 共通言語ランタイムを対象としたプログラムに含まれるバグの発見と修正について、ツールの販売元とアプリケーション開発者を支援するツールです。このツールは、ランタイム Debug API を使用してデバッグ サービスを提供します。Cordbg.exe のソース コードは、サンプル アプリケーションとして出荷されています。開発者は、このコードを検討することで、デバッグ サービスの使用方法を学習できます。現時点では、Cordbg.exe を使用してもマネージ コードのデバッグしか実行できません。アンマネージ コードのデバッグはサポートされていません。

Cordbg.exe セッションを開始するには、下の構文の 1 行目を使用します。Cordbg.exe セッション内 の (cordbg) プロンプトで 2 行目を使用します。

cordbg [ProgramName[Program arguments]][optional arguments ]
command [command arguments]

パラメータ

コマンド 説明

ap[pdomainenum] [option]

現在のプロセスに含まれるすべてのアプリケーション ドメイン、アセンブリ、およびモジュールを列挙します。引数 option を指定しない場合は、現在のプロセスに含まれるすべてのアプリケーション ドメイン、アセンブリ、およびモジュールが一覧表示されます。デタッチまたはアタッチした後で実行を再開するには、go コマンドを指定する必要があります。

引数 option には次のいずれかを指定できます。

attach

プロセスに含まれるアプリケーション ドメインが一覧表示され、どのドメインにアタッチするのかを選択するように求めるメッセージが表示されます。

detach

プロセスに含まれるアプリケーション ドメインが一覧表示され、どのドメインからデタッチするのかを選択するように求めるメッセージが表示されます。

0

プロセスに含まれるアプリケーション ドメインが一覧表示されます。

1

プロセスに含まれるアプリケーション ドメインとアセンブリが一覧表示されます。

as[sociatesource] {s|b breakpoint id} filename

指定したファイル名を現在のスタック フレーム ポインタ (オプション s) または指定したブレークポイント (オプション b) と関連付けます。

a[ttach] pid

実行中のプロセスにデバッガをアタッチします。Cordbg.exe は、現在デバッグ対象としているプログラム (存在する場合) を強制終了し、引数 pid で指定されたプロセスへのアタッチを試行します。プロセス識別番号 pid には 10 進形式または 16 進形式を使用できます。

b[reak] [[file:] line number] |

[[ class::] function [:offset]]

ブレークポイントを設定または表示します。引数を指定しない場合は、現在のブレークポイントの一覧が表示されます。指定する場合は、指定した位置にブレークポイントが設定されます。ブレークポイントを設定できるのは、現在のソース ファイル内の行番号、絶対パス指定したソース ファイル内の行番号、またはクラスとオプションのオフセットによって限定したメソッド内です。

ブレークポイントの設定は、1 回のセッションの中で実行される間持続します。break コマンドと同じ方法で、stop コマンドを使用できます。

指定されたブレークポイントの位置とコードをバインドできない場合、ブレークポイントは "アンバウンド" として表示されます。ブレークポイントがアンバウンドということは、ブレークポイント位置の基になるコードがまだ読み込まれていないことを意味します。この状況は、ファイル名やクラス名のスペルの間違い (名前では大文字と小文字が区別されます) などによって発生することがあります。アプリケーションの実行前にブレークポイントを設定した場合も、ブレークポイントはアンバウンドになります。実際のコードが読み込まれたときに、ブレークポイントはバインドされます。デバッガは、モジュールの読み込み時に、すべてのアンバウンド ブレークポイントを自動的にバインドし直そうとします。

ca[tch] [event]

イベントの種類を一覧表示するか、または指定した種類イベントが発生したときにデバッガを停止します。引数を指定しない場合は、イベントの種類が一覧表示されます。デバッガを停止するイベントの種類には "on" のマーク、無視されるイベントの種類には "off" のマークが付けられます。引数を指定した場合は、指定した種類のイベントが発生するとデバッガが停止します。既定では、処理されない例外イベント (つまり、セカンド チャンス例外) の発生時にだけ、デバッガが停止します。デバッガを停止するイベントの種類は、1 回のセッションの中で実行される間持続されます。デバッガが特定の種類のイベントを無視するようにするには、ignore コマンドを使用します。

引数 event には次のいずれかを使用できます。

e[xceptions] [exception type]

このツールは、キャッチする初回例外のリストに例外の種類を追加します。例外の種類を指定しない場合は、すべての初回例外がキャッチされます。例外の種類では、たとえば System.ArgumentException のように、大文字と小文字が区別されます。

u[nhandled]

処理されない例外

c[lass]

クラス読み込みイベント

m[odule]

モジュール読み込みイベント

t[hread]

スレッド起動イベント

conn[ect] machine_name port

スマート デバイス プロジェクトの場合。

.NET Compact Framework アプリケーションを実行しているリモート デバイスに接続します。

パラメータ 定義

machine_name

必ず指定します。リモート コンピュータの名前または IP アドレス。

ポート

必ず指定します。リモート コンピュータへの接続に使用するポート。

cont [count]

プログラムを続行します。引数を指定しない場合は、プログラムが 1 回だけ続行されます。引数を指定すると、プログラムは指定した回数だけ続行されます。このコマンドは、クラス読み込みイベント、例外、またはブレークポイントによってデバッガが停止したときにプログラムを続行する場合に便利です。cont コマンドと同じ方法で go コマンドを使用できます。

del[ete] [breakpoint id, ...]

ブレークポイントを削除します。引数を指定しない場合は、現在のブレークポイントがすべて削除されます。1 つ以上の引数 breakpoint id を指定すると、指定したブレークポイントが削除されます。ブレークポイント識別子を取得するには、break コマンドまたは stop コマンドを使用します。delete コマンドと同じ方法で remove コマンドを使用できます。

de[tach]

現在のプロセスからデバッガをデタッチします。このプロセスは自動的に続行され、デバッガがアタッチされていないかのように実行されます。

dis[assemble] [0xaddress][{+|-} delta] [line count]

指定した場合は、現在の命令ポインタまたはアドレスについて、逆アセンブルしたネイティブな命令を表示します。表示される命令数の既定値は 5 です。引数 line count を指定すると、現在の命令ポインタまたはアドレスの前後に、指定した個数の命令が表示されます。最後に指定した line count が、現在のセッションの既定値になります。delta を指定すると、指定した数が現在の命令ポインタまたは指定したアドレスに加算され、そこから逆アセンブルが開始されます。

d[own] [count]

スタック フレーム ポインタを、調査の目的で現在のフレームによって呼び出されたフレームに向かって、下向きに移動します。引数を指定しない場合、スタック フレーム ポインタは 1 フレームだけ下に移動します。引数を指定すると、スタック フレーム ポインタは指定したフレーム数だけ下に移動します。ソース レベルの情報を利用できる場合は、フレームと対応するソース行が表示されます。このコマンドは、up コマンドと組み合わせて頻繁に使用されます。

du[mp] address [count]

デバッガのモードに従って、メモリ ブロックを 16 進形式または 10 進形式の出力でダンプします (mode の説明を参照)。引数 address はメモリ ブロックのアドレスです。引数 count はダンプするバイト数です。

ex[it]

現在のプロセスを停止し、デバッガを終了します。exit コマンドと同じ方法で quit コマンドを使用できます。

f[unceval] [class::] function [ arg0 arg1 ...argn]

現在のスレッドに関して、指定した関数を評価します。このツールは、新しいオブジェクトを変数 $result に格納しておき、それを以降の評価に使用します。有効な引数は、他の変数、4 バイト整数、および NullTrueFalse の各定数に限定されます。

注意

メンバ関数については、最初の引数として、メンバ関数が所属するクラスか派生クラスのオブジェクトを指定する必要があります。

g[o] [count]

cont の説明を参照してください。

h[elp] [command ...]

指定したコマンドの説明を表示します。引数を指定しない場合は、デバッガ コマンドの一覧が表示されます。help コマンドと同じ方法で ? コマンドを使用できます。

ig[nore] [event]

イベントの種類を一覧表示するか、または指定したイベントの種類をデバッガに無視させます。引数 event を指定しない場合は、イベントの種類が一覧表示されます。無視されるイベントの種類には "off" のマーク、デバッガを停止するイベントの種類には "on" のマークが付けられます。引数を指定すると、指定した種類のイベントが無視されます。デバッガを停止するイベントの種類を設定するには、catch コマンドを使用します。

引数 event には、次のいずれかのイベントの種類を指定できます。

e[xceptions] [exception type]

このツールは、無視する初回例外のリストに例外の種類を追加します。例外の種類を指定しない場合は、すべての初回例外が無視されます。例外の種類では、たとえば System.ArgumentException のように、大文字と小文字が区別されます。

u[nhandled]

処理されない例外

c[lass]

クラス読み込みイベント

m[odule]

モジュール読み込みイベント

t[hread]

スレッド起動イベント

i[n] [count]

step の説明を参照してください。

k[ill]

現在のプロセスを停止します。デバッガは、アクティブな状態を維持して、後続のコマンドを処理します。

l[ist] option

読み込まれたモジュール、クラス、またはグローバル関数の一覧を表示します。

引数 option には次のいずれかを指定できます。

mod

プロセス内に読み込まれたモジュールを一覧表示します。

cl

プロセス内に読み込まれたクラスを一覧表示します。

fu

プロセス内に読み込まれた各モジュールのグローバル関数を一覧表示します。

m[ode] [[mode name {0|1} ]

各種のデバッガ機能に対応するデバッガのモードを設定または表示します。値を設定するには、mode name を指定し、"on" にするには 1、"off" にするには 0 を指定します。引数を指定しない場合は、現在のモード設定が一覧表示されます。Cordbg.exe の実行中、モードは Windows レジストリに保持されます。詳細については、デバッガの「モード引数」の表を参照してください。

newo[bj] class

現在のスレッドを使用して新しいオブジェクトを作成します。このツールは、新しいオブジェクトを変数 $result に格納しておき、それを以降の評価に使用します。

newobjnc class

現在のスレッドを使用して新しいオブジェクトを作成します。ただし、オブジェクトのコンストラクタは実行されません。新しいオブジェクトはゼロに初期化されます。このツールは、新しいオブジェクトを変数 $result に格納しておき、それを以降の評価に使用します。

news[tr] string

現在のスレッドを使用して新しい文字列を作成します。このツールは、新しいオブジェクトを変数 $result に格納しておき、それを以降の評価に使用します。

n[ext] [count]

関数呼び出しをステップ オーバーして、次のソース行までプログラムを実行します。引数を指定しない場合は、1 行だけソース行を実行します。引数を指定すると、指定した行数だけソース行が実行されます。next コマンドと同じ方法で so コマンドを使用できます。

ns[ingle] [count]

関数呼び出しをステップ オーバーして、1 つ以上の命令を実行します。引数を指定しない場合は、1 つの命令が実行されます。引数 count を指定すると、指定した個数の命令が実行されます。

o[ut] [count]

現在の関数を実行せずに先に進みます。引数を指定しない場合は、現在の関数でステップ アウトが 1 回実行されます。引数を指定すると、指定した回数だけステップ アウトが実行されます。

pa[th] [new path]

ソース ファイルおよびのデバッグ シンボルの検索に使用されるパスを表示または設定します。引数を指定しない場合は、現在のパスが表示されます。引数 new path を指定すると、そのパスが、ソース ファイルとデバッグ シンボルを検索するための新しいパスになります。このパスは、セッションが終了しても Windows のレジストリの中に保存されます。

p[rint] [variable name]

1 つ以上のローカル変数をその値と共に表示します。引数を指定しない場合は、すべてのローカル変数とその値が表示されます。引数を指定すると、指定したローカル変数の値だけが表示されます。詳細については、例の「Print コマンドの使用」を参照してください。

pro[cessenum]

すべてのマネージ プロセスと、各プロセス内のアプリケーション ドメインを列挙します。

q[uit]

exit の説明を参照してください。

ref[reshsource] [source file]

指定したソース ファイルのソース コードを再読み込みします。再読み込みされるソース ファイルは、現在実行されているプログラムの一部である必要があります。path コマンドでソース ファイル パスを設定した後、refreshsource コマンドを使用して足りないソース コードを読み込むことができます。

regd[efault] [force]

既定のジャスト イン タイム (JIT) デバッガを Cordbg.exe に設定します。既に他のデバッガが登録されている場合、このコマンドは何も実行しません。登録済みの JIT デバッガを上書きするには、引数 force を使用します。

reg[isters]

現在のスレッドのレジスタの内容を表示します。

rem[ove] [breakpoint id, ...]

delete の説明を参照してください。

re[sume] [~] [tid]

デバッガを続行するときに、引数 tid で指定したスレッドを再開します。構文 ~ を使用した場合は、指定したスレッドを除くすべてのスレッドが再開されます。引数を指定しない場合、このコマンドは無効です。

r[un] [executable [args]]

現在のプロセス (存在する場合) を強制終了し、新しいプロセスを起動します。引数 executable を指定しない場合は、前に run コマンドで実行されたプログラムが実行されます。引数 executable を指定すると、オプションとして指定された args を使用して、指定したプログラムが実行されます。Cordbg.exe がクラス読み込みイベント、モジュール読み込みイベント、およびスレッド起動イベントを無視する場合 (既定の状態)、このプログラムは、メイン スレッドの最初の実行可能命令で停止します。

set variable value

指定した variable の値を指定した value に設定します。この値には、リテラル、または他の変数を使用できます。詳細については、例の「Set コマンドの使用」を参照してください。

setip line number

line number で指定された行を、次に実行するステートメントとして設定します。

sh[ow] [count]

ソース コード行を表示します。引数を指定しない場合は、現在のソース コード行の前後 5 行のソース コード行が表示されます。引数を指定すると、現在の行の前後に、指定した数の行が表示されます。最後に指定した count が、現在のセッションの既定値になります。

si [<count>]

step の説明を参照してください。

so [<count>]

next の説明を参照してください。

ss[ingle] [count]

1 つ以上の命令を実行します。関数呼び出しにステップ インします。引数を指定しない場合は、命令が 1 つだけ実行されます。引数を指定すると、指定した数のステップが実行されます。

s[tep] [count]

次のソース行までプログラムを実行します。関数呼び出しにステップ インします。引数を指定しない場合、プログラムは次のソース行まで進みます。引数を指定すると、プログラムは指定した行数だけ進みます。step コマンドと同じ方法で si コマンドまたは in コマンドを使用できます。

stop [[file:] line number] |

[[class::] function[:offset]] |

[=0xaddress]

break の説明を参照してください。

su[spend] [~] [tid]

デバッガを続行するときに、引数 tid によって指定したスレッドを一時停止します。構文 ~ を使用した場合は、指定したスレッドを除くすべてのスレッドが一時停止されます。引数を指定しない場合、このコマンドは無効です。

t[hreads] [tid]

スレッドを一覧表示するか、または現在のスレッドを設定します。引数を指定しない場合は、まだ有効な、マネージ コードを実行していたすべてのスレッドが表示されます。引数を指定すると、現在のスレッドを指定したスレッドに設定します。

up [count]

スタック フレーム ポインタを、調査目的のため現在のフレームを呼び出したフレームへと上向きに移動します。引数を指定しない場合、スタック フレーム ポインタは 1 フレーム分上に移動します。引数を指定すると、スタック フレーム ポインタは指定したフレーム数だけ上に移動します。ソース レベルの情報を利用できる場合は、フレームと対応するソース行が表示されます。

w[here] [count]

現在のスレッドのスタック トレースを表示します。引数を指定しない場合は、完全なスタック トレースが表示されます。引数を指定すると、指定した個数のスタック フレームが表示されます。

wr[itememory] address count byte, ...

指定したバイト数を対象のプロセスに書き込みます。引数 address は、データを書き込む場所を指定します。引数 count は、書き込むバイト数を指定します。引数 byte は、プロセスに書き込む対象を指定します。一覧内のバイト数が引数 count の値よりも小さい場合は、一覧を折り返し、再度コピーします。一覧内のバイト数が引数 count の値よりも多い場合、余分なバイト数は無視されます。

wt

アプリケーションをネイティブな命令単位で実行します。現在の命令から開始して、コール ツリーを表示しながら実行して行きます。各関数で実行されたネイティブな命令の数、およびコール トレースが表示されます。コマンドの呼び出し元の関数と対応するリターン命令に到達すると、トレースが停止します。トレースの終了時点で、実行された命令の合計数が表示されます。このコマンドは、NT の Symbolic Debugger の wt コマンドによく似たコマンドで、基本的な性能の分析を行うために使用できます。現時点では、マネージ コードだけがカウントされます。

x modulename ! string_to_look_for

指定したモジュールの中で、引数 string_to_look_for で指定したパターンと一致するシンボルを表示します。引数 string_to_look_for でアスタリスク (*) 文字を指定すると、すべてのシンボルを検索できます。* 文字の後ろの文字は無視されます。

? [command ...]

help の説明を参照してください。

> filename

実行されたすべてのコマンドを指定した filename に書き込みます。filename を指定しない場合は、ファイルへのコマンドの書き込みが停止します。

< filename

指定した filename からコマンドを読み込んで実行します。

注意

Cordbg.exe コマンドでは、大文字と小文字が区別されます。また、同義語のコマンドもあります。その場合は、どのコマンドを使用しても同じ結果が得られます。たとえば、break コマンドと stop コマンドのどちらを使用しても、ブレークポイントを設定できます。

モード引数

モード引数を指定するには、モードが重複しないようにするために必要な最小の文字数を指定します。たとえば、"モード m 1" は、"mode moduleloads 1" と同じです。

引数 説明

AppDomainLoads

アプリケーション ドメインとアセンブリ読み込みイベントを表示します。

ClassLoads

クラス読み込みイベントを表示します。

DumpMemoryInBytes

メモリの内容をバイト型または DWORDS 型として表示します。

EmbededCLR

スマート デバイス上で実行している目的の .NET Compact Framework アプリケーションに対して、デバッガを設定します。この設定をオンにするには 1 を、オフにするには 0 を指定します。

EnhanceDiag

拡張診断情報を表示します。

HexDisplay

数値を 16 進形式または 10 進形式で表示します。

ILNatPrint

オフセットを Microsoft Intermediate Language (MSIL)、ネイティブな相対言語、またはその両方で表示します。

ISAll

すべてのインターセプタをステップ実行します。

ISClinit

クラス初期化子をステップ実行します。

ISExceptF

例外フィルタをステップ実行します。

ISInt

ユーザー インターセプタをステップ実行します。

ISPolicy

コンテキスト ポリシーをステップ実行します。

ISSec

セキュリティ インターセプタをステップ実行します。

JitOptimizations

JIT コンパイルで、デバッグしやすいコードを生成するかどうかを指定します。

LoggingMessages

マネージ コードのログ メッセージを表示します。

ModuleLoads

モジュール読み込みイベントを表示します。

SeparateConsole

デバッグ対象のプロセスが、専用のコンソールを取得するかどうかを指定します。

ShowArgs

スタック トレース内のメソッド引数を表示します。

ShowModules

スタック トレース内のモジュール名を表示します。

ShowStaticsOnPrint

オブジェクトの静的フィールドを表示します。

ShowSuperClassOnPrint

オブジェクトの基本クラスの内容を表示します。

USAll

すべての割り当てられていない停止位置をステップ実行します。

USEpi

メソッド エピローグをステップ実行します。

USPro

メソッド プロローグをステップ実行します。

USUnmanaged

アンマネージ コードをステップ実行します。

解説

デバッグするアプリケーションをコンパイルするときは、コンパイラ固有のフラグを使用します。そのフラグによって、コンパイラがデバッグ シンボルを生成します。コンパイラ固有のフラグの詳細については、コンパイラのドキュメントを参照してください。最適化したアプリケーションでもデバッグはできますが、一部のデバッグ情報が欠落しています。たとえば、ローカル変数の多くを表示できなくなり、ソース行も不正確になります。

アプリケーションをコンパイルした後、コマンド プロンプトに「cordbg」と入力してデバッグ セッションを開始します。例を次に示します。

D:\Program Files\FrameworkSDK\Bin>cordbg
Microsoft (R) Common Language Runtime Test Debugger Shell. Version 2000.14.2100.0, Copyright (c) Microsoft Corp. 1998-2000
(cordbg)

(cordbg) プロンプトは、デバッガが起動したことを表します。

デバッガが起動したら、コマンドと適切な引数を使用して、必要な機能を呼び出してください。

コマンド行でデバッグ セッションを開始する場合は、デバッグするアプリケーションの名前、プログラム引数、およびオプションの引数も指定できます。Cordbg.exe のオプション引数は、Cordbg.exe の実行中に使用するのと同じコマンドですが、プリフィックスとして感嘆符 (!) 文字を付ける必要があります。文字列の中で ! 文字をリテラルとして使用するには、プリフィックスとして円記号 (\) 文字を付けます。これは、x コマンドを使用するときに必要です。

コマンドに対する数値引数が 0x というプリフィックスで始まる場合、Cordbg.exe は引数が 16 進形式であると見なします。それ以外の場合は、引数を 10 進形式と見なします。

Cordbg.exe のほとんどのコマンドの前には、アスタリスク (*) を付けることができます。アスタリスクを付けたコマンドは、プロセス内のマネージ スレッドごとに 1 回ずつ実行されます。このコマンドは、各スレッドのコンテキスト内で実行されます。アスタリスクを付けることによって最も役立つコマンドは、w[here] コマンドです。たとえば、*w によって、すべてのマネージ スレッドのスタック トレースが出力されます。

ランタイムのデバッグ サービスの詳細については、「アプリケーションのデバッグとプロファイリング」を参照してください。また、ツールの開発者は、.NET Framework SDK に同梱される Tools Developers Guide フォルダ内の「Debug Overview」および「Debug Reference」を参照する必要があります。

Cordbg.exe セッションの開始

次のコマンドでは、アプリケーション MyApplication.exe について、プログラム引数 a2 を使用して Cordbg.exe セッションを開始します。さらに、オプション コマンドとして、MyApplication.cs の行番号 42 にブレークポイントを設定し、アプリケーションを続行し、文字列 'SomeString' と一致する MyApplication.exe 内のシンボルを表示します。

cordbg MyApplication.exe a 2 !b MyApplication.cs:42 !g !x MyApplication.exe\!SomeString

Cordbg.exe セッション内での実行可能ファイルの実行

Cordbg.exe セッション内で ((cordbg) プロンプトに対して) 次のコマンドを入力すると、プログラム引数 a2 を使用して実行可能ファイル MyApplication.exe が実行されます。

run MyApplication.exe a 2

print コマンドでドット表記を使用すると、オブジェクト内の変数を指定できます。次にそのコマンドの例を示します。

print obj.var1
print obj1.obj2.var1

あるクラスが他のクラスを拡張する場合に print コマンドを実行すると、指定したクラスのフィールドと基本クラスのフィールドの両方が表示されます。たとえば、クラス m1 にフィールド ab、および c があり、m1 を拡張するクラス m2 にフィールド de、および f がある場合、m2 のインスタンス myInstance は次のように表示されます。

myInstance = <addr> <m2>
      a = 1
      b = 2
      c = 3
      m2::d = 4
      m2::e = 5
      m2::f = 6

クラス静的変数を指定するには、変数名にプリフィックスとしてクラス名を付けます。次にその例を示します。

print MyClass::StaticVar1
print System::Boolean::True

配列インデックスは単純な式にする必要があります。print コマンドとの使用に有効な配列インデックスを次に示します。

print arr[1]
print arr[i]
print arr1[arr2[1]]
print md[1][5][myObject.a]

次の配列インデックスは単純な式ではないため、print コマンドと一緒には使用できません。

print arr[i + 1]
print arr[i + 2]

set コマンドの使用

set コマンドを使用する場合は、指定した変数に代入する値として、リテラル、または他の変数を使用できます。set コマンドの使用方法として有効な例を次に示します。

set int1 0x2a
set float1 3.1415
set char1 'a'
set bool1 true
set obj1 0x12345678
set obj1 obj2
set obj1.m_length[obj1.m_height] obj3.m_length[2]

参照

関連項目

.NET Framework ツール
SDK のコマンド プロンプト