デバッグツール

本章では、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 console
    ofadbgの実行画面

1.1. コマンド

ofadbgでは、コードのトレースや情報の出力のためにさまざまなコマンドをサポートしています。詳しい説明は以下のとおりです。

コマンド 説明

break(b) [<entry>:]<line_number>

ブレークポイントを設定します。ブレークポイントの設定時にエントリを指定できますが、指定しない場合は現在実行中のエントリに設定されます。その後、continue(c)またはrun(r)コマンドで設定したブレークポイントまで移動します。

  • b 10:現在のエントリの10行目にブレークポイントを設定します。

  • b TESTASM:10:TESTASMエントリの10行目にブレークポイントを設定します。

break(b) list

現在までに設定したブレークポイントの一覧を表示します。

  • b list:現在までに設定したブレークポイントの一覧を表示します。

delete(d)

ブレークポイントのインデックスを指定して、該当するブレークポイントを削除します。

  • d 2:2番目のブレークポイントを削除します。

display(dis) <symbol>|<address> [[offset:][length]]

特定のシンボルまたはアドレスを値トレース項目として登録します。シンボルを指定した場合のみオフセットが有効であり、長さを指定しない場合、シンボルの場合は割り当てられたサイズ、アドレスの場合は4バイトで決定されます

  • dis P1 2:8:P1シンボルの2バイト目から8バイト分を値トレース項目として登録します。

  • dis P1:シンボルを値トレース項目として登録します。長さはP1に割り当てられたサイズで決まります。

  • dis 0x1f3240 8:0x1f3240アドレスの値をトレース項目として登録します。長さは8バイトで決まります。

  • dis 0x1f3240:0x1f3240アドレスの値をトレース項目として登録します。長さは4バイトで決まります。

display(dis) list

現在までに登録したシンボルの値トレース項目を表示します。

  • dis list:現在までに登録したシンボルの値トレース項目を表示します。

display(dis) remove(rm) <index>

値トレース項目として登録された特定のインデックスに該当する項目を削除します。

  • dis rm 1:1番目の項目を値トレース項目から削除します。

set register(reg) <register_num> <hex>|<decimal>

特定のレジスタに値を指定します。値には整数値または16進数値を指定できます。

  • set reg 2 0x41414141:2番のレジスタに0x41414141の16進数値を指定します。

  • set reg 2 10000:2番のレジスタに10000の値を指定します。

set variable(var) <symbol_name> <hex>|<string>

特定のシンボルに値を指定します。値には文字列または16進数値を指定できます。

  • set var P1 AAAA:P1シンボルに「AAAA」という文字列の値を指定します。

  • set var P1 0x41414141:P1シンボルに0x41414141の16進数値を指定します。

set address(addr) <address> <hex>|<decimal>

特定のアドレスに値を指定します。値には整数値または16進数値を指定できます。

  • set addr 12543 0x41414141:12543の値に対応するアドレスに0x41414141の16進数値を指定します。

  • set addr 0x1f654 10000:0x1f654番目のアドレスに10000の値を指定します。

print(p) <symbol> [[offset:][length]]

特定のシンボルの値を表示します。オフセットと長さを指定できます。省略した場合、長さはシンボルのサイズになります。

  • p P1:P1シンボルの値を表示します。長さはP1に割り当てられたサイズで決まります。

  • p P1 2:8:P1シンボルの2バイト目から8バイト分の値を表示します。

print(p) <address> [length]

特定のアドレスの値を表示します。長さを指定しない場合は4バイトとして扱われます。アドレス値は整数値または16進数値が指定可能です。

  • p 12453 4:12453番目のアドレスの値を4バイト分表示します。

  • p 0x1f324 4:0x1f324番目のアドレスの値を4バイト分表示します。

print(p) <d(x,b)> [length]

指定したレジスタフォーマットで決定されたアドレスの値を表示します。長さを指定しない場合は4バイトとして扱われます。

  • p 10(4,12) 8:10(4,12)番目のアドレスの値を8バイト分表示します。

  • p 10(4,12):10(4,12)番目のアドレスの値を基本の4バイト分表示します。

set listsize <value>

コンソールモードで出力されるコードの行数を設定します。このコマンドはコンソールモードでのみ有効です。

  • set listsize 30:コンソールモードで表示されるコードの行数を30行に制限します。

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:デバッグツールの状態とメッセージを表示し、コマンドを入力できる入力ウィンドウを提供します。

ofadbg tui
ofadbg tuiモード