Skip to content

Latest commit

 

History

History
39 lines (22 loc) · 3.77 KB

mgba_with_gdb.md

File metadata and controls

39 lines (22 loc) · 3.77 KB

mgbaをgdbでデバッグする方法

Debugging With mGBAを翻訳したものです。

  1. ROMをmGBAで開く
  2. mGBAのデバッグサーバーUIを開く(MacOSの場合は、open Tools -> Start GDB server)
  3. オプションを指定して、Start
  4. ターミナルを開いて、/opt/devkitpro/devkitARM/bin/arm-none-eabi-gdbと叩き、GDBを実行する
  5. GDBのシェル内で、target remote localhost:2345を実行(3のオプションによってlocalhost:2345を調整してください)
  6. GDBのシェル内で、file <path_to_elf>を叩く(確認時にはy)

GDBのコマンドについて

target remote dev

ターゲットとは、 ユーザ・プログラムが持つ実行環境を指します。 多くの場合、 GDBはユーザ・プログラムと同一のホスト環境上で実行されます。 この場合には、 fileコマンドやcoreコマンドを実行すると、 その副作用としてデバッグ・ターゲットが指定されます。

例えば、 物理的に離れた位置にあるホスト・マシン上でGDBを実行したい場合や、 シリアル・ポート経由でスタンドアロン・システムを制御したい場合、 または、 TCP/IP接続を利用してリアルタイム・システムを制御したい場合などのように、 より多くの柔軟性が必要とされる場合、 targetコマンドを使うことによって、 GDBに設定されたターゲットの種類の中から1つを指定することができます。

target remote dev

GDB固有のプロトコルによる、 リモートのシリアル・ターゲットです。 引数devによって、 接続を確立するために使用するシリアル装置 (例えば、 /dev/ttya) を指定します。 リモート・デバッグを参照してください。 target remoteは、 loadコマンドもサポートするようになりました。 これは、 スタブをターゲット・システム上に持っていく方法が別にあり、 かつ、 ダウンロードが実行されたときに破壊されないようなメモリ域にそれを置くことができる場合にのみ役に立ちます。

file filename

filenameで指定されるプログラムをデバッグ対象にします。

そのプログラムは、 シンボル情報とメモリ内容を獲得するために読み込まれます。 また、 ユーザがrunコマンドを使用したときに実行されます。

ユーザがディレクトリを指定せず、 そのファイルがGDBの作業ディレクトリに見つからない場合、 シェルが実行すべきファイルを探すときと同様、 GDBは、 ファイルを探すべきディレクトリのリストとして環境変数PATHの値を使用します。

pathコマンドによって、 GDB、 ユーザ・プログラムの両方について、 この変数の値を変更することができます。 ファイルをメモリにマップすることのできるシステムでは、 補助的なファイルfilename.symsに、 ファイルfilenameのシンボル・テーブル情報が格納されることがあります。

このような場合、 GDBは、 filename.symsというファイルからシンボル・テーブルをメモリ上にマップすることで、 起動に要する時間を短くします。 詳細については、 (以下に説明するfileコマンド、 symbol-fileコマンド、 add-symbol-fileコマンドを実行する際にコマンドライン上で使用可能な) ファイル・オプションの-mapped-readnowの説明を参照してください。

参考記事