デバッグツール
本章では、ofasmが提供するデバッグツールについて説明します。
1. ofadbg
ofadbgは、OpenFrame Assemblerで実行されたコードをトレースし、情報を出力するためのツールです。
以下は、ofaobjの使用方法です。
ofadbg <ポート番号>
ofadbgによるデバッグは、ofasmのデバッグ・バイナリでのみ使用可能です。 |
-
コードの修正
デバッグを行いたい箇所にOFADBGREG 220コマンドを挿入する必要があります。このコマンドが実行されると、デバッグ用のソケット・サーバーが生成され、ソケット接続を待機する状態になります。
TESTASM CSECT LR 12,15 USING TESTASM,12 ST 14,SAVEAREA OFADBGREG 220 L 2,0(1) L 3,4(1) MVC P1(4),0(2) MVC P2(4),0(3) CALL TESTCOB,(P1,P2),VL L 14,SAVEAREA BR 14 * SAVEAREA DS F P1 DS CL4 P2 DS CL4 END
OFADBGREG 220コマンドが実行されると、以下のようなメッセージが出力されます。メッセージの内容に従って、対応するコマンドを実行します。
OFASM: OFADBGREG[220], CONNECT DEBUGGER Please run this command "ofadbg 41353", Port is "41353"
-
コンパイル
ofadbgを使用するためには、ofasm -gを使用してデバッグ情報付きのasmoオブジェクトコードを生成して実行する必要があります。
ofasm TESTASM.asm -g
-
ツールの実行
ofadbgツールを使用してデバッグを実行します。このとき、待機中のソケット・サーバーへの接続が試みられ、接続に成功すると、現在実行中のasmiファイルのコードが出力されます。
ofadbg 41353
-
実行画面
ofadbgツールが正常に実行されると、以下のようなコンソール画面が表示されます。
ofadbgの実行画面
1.1. コマンド
ofadbgでは、コードのトレースや情報の出力のためにさまざまなコマンドをサポートしています。詳しい説明は以下のとおりです。
コマンド | 説明 |
---|---|
break(b) [<entry>:]<line_number> |
ブレークポイントを設定します。ブレークポイントの設定時にエントリを指定できますが、指定しない場合は現在実行中のエントリに設定されます。その後、continue(c)またはrun(r)コマンドで設定したブレークポイントまで移動します。
|
break(b) list |
現在までに設定したブレークポイントの一覧を表示します。
|
delete(d) |
ブレークポイントのインデックスを指定して、該当するブレークポイントを削除します。
|
display(dis) <symbol>|<address> [[offset:][length]] |
特定のシンボルまたはアドレスを値トレース項目として登録します。シンボルを指定した場合のみオフセットが有効であり、長さを指定しない場合、シンボルの場合は割り当てられたサイズ、アドレスの場合は4バイトで決定されます
|
display(dis) list |
現在までに登録したシンボルの値トレース項目を表示します。
|
display(dis) remove(rm) <index> |
値トレース項目として登録された特定のインデックスに該当する項目を削除します。
|
set register(reg) <register_num> <hex>|<decimal> |
特定のレジスタに値を指定します。値には整数値または16進数値を指定できます。
|
set variable(var) <symbol_name> <hex>|<string> |
特定のシンボルに値を指定します。値には文字列または16進数値を指定できます。
|
set address(addr) <address> <hex>|<decimal> |
特定のアドレスに値を指定します。値には整数値または16進数値を指定できます。
|
print(p) <symbol> [[offset:][length]] |
特定のシンボルの値を表示します。オフセットと長さを指定できます。省略した場合、長さはシンボルのサイズになります。
|
print(p) <address> [length] |
特定のアドレスの値を表示します。長さを指定しない場合は4バイトとして扱われます。アドレス値は整数値または16進数値が指定可能です。
|
print(p) <d(x,b)> [length] |
指定したレジスタフォーマットで決定されたアドレスの値を表示します。長さを指定しない場合は4バイトとして扱われます。
|
set listsize <value> |
コンソールモードで出力されるコードの行数を設定します。このコマンドはコンソールモードでのみ有効です。
|
tui |
コンソールモードからTUI(テキストユーザーインターフェース)モードに切り替えます。 |
1.2. TUI (Text user interface)モード
ofadbgで提供されるユーザーインターフェース画面に切り替わります。コンソールモードのコマンドウィンドウで「tui」と入力すると有効化されます。
-
SOURCE CODE:トレース中のコードを表示し、実行中のASMプログラムを順番に出力します。
-
REGISTER INFO:R0からR15までのレジスタの現在値を表示します。Condition Code(CC)とProgram Counter(PC)の値も表示します。
-
SYMBOL LIST:トレース項目に登録されているシンボルの値を表示します。
-
MEMORY LIST:トレース項目に登録されているアドレスの値を表示します。
-
CONSOLE:デバッグツールの状態とメッセージを表示し、コマンドを入力できる入力ウィンドウを提供します。
