OpenOCDによって制御される組み込みmcu用にgdbを使用して小さな単体テストを作成しようとしています(これにより、gdbサーバーを介してターゲットを制御できます)。
そこで、gdbのスクリプトを使用してこれを自動化したいと思います。
多かれ少なかれこれを行うgdb用のある種のスクリプトを書きたいと思います。
- ブレークポイントをいくつか追加します
- プログラムを開始します
- 停止したとき、どこで停止しましたか(フレーム情報を取得)
- 終了する。
何か案は?
Pythonのgdbスクリプトでこれを行う方法の例がいいでしょう。
ありがとうヨハン
注:
この基本構造があり、関数start_test()が返すものに応じて、多かれ少なかれtest_failed()またはtest_success()に入るとしましょう。
void test_failed() {
while(1);
}
void test_success() {
while(1);
}
int main(void) {
int status = start_test();
if( status > 0 ) {
test_failed();
}
test_success();
while(1);
}
gdbでこれを手動で行うことは、非常に簡単です。
(gdb) break test_success
Breakpoint 1 at 0x20: file src/main.c, line 9.
(gdb) break test_failed
Breakpoint 2 at 0x18: file src/main.c, line 5.
(gdb) cont
Continuing.
Breakpoint 1, test_success () at src/main.c:9
9 while(1);
(gdb) frame
#0 test_success () at src/main.c:9
9 while(1);
(gdb)
したがって、私が試した次のステップは、これらのgdbコマンドをgdb起動スクリプトに追加することでした。これは多かれ少なかれこのように見えます。
break test_success
break test_failed
target remote localhost:3333
cont
frame
で始めます
arm-none-eabi-gdb --batch --command=commands.gdb main.elf
そして、この種の作品ですが、それはあまり良くありません。gdbがサポートしているように見える「新しくてかっこいい」Pythonスクリプトでこれを行うにはどうすればよいですか。