gdb

GDB において特定の回数関数が呼ばれたら break する

gdb

GDB において特定の回数関数が呼ばれたら break する方法。 # break point を表示。番号を知る (gdb) info b Num Type Disp Enb Address What 1 breakpoint keep y 0x0000000000413fab in scheme::VM::runLoop(scheme::Object*, __jmp_buf_tag*, bool) at sr…

GDB スタブを書いてみよう まとめ

gdb

成果 まとめ GDB stub を移植すれば自作 OS でも GDB が使える GDB stub は i386-stub.c を移植するだけ。とても簡単。 自前で用意するのは Serial port の read/write (必要があれば)割り込みハンドラで GDB 用のハンドラを呼び出す事。必要がなければ st…

GDB スタブを書いてみよう その11

gdb

まずは細かな TODO を片付ける。 gdbCatchException の処理共通化 全ての割り込みハンドラに対応する if (remote_debug) 一番最初の breakpoint exception で stub ハンドラをインストール breakpoint() 関数の追加 行番号が表示されない問題 以下のような条…

GDB スタブを書いてみよう その10

gdb

GDB スタブと Mona カーネルをうまくつないでいく。できるだけ疎結合で。 カーネルスタックの入れ替え GDB スタブは基本的に割り込みハンドラ内で動くのでカーネルスタックを利用するのだが、間違いが起きないように handle_exception の呼び出し前にカーネ…

GDB スタブを書いてみよう その9

GDB とのパケットのずれを解決しよう。GDB から提供されている stub は qSupported#37 への応答を返していないのが問題のようだ。 stub に手を入れて handle_exception 適当に PacketSize=400 と返すようにした。 ちなみに stub に突入する前に以下のパケッ…

GDB スタブを書いてみよう その8

gdb

0x00002b87 in ?? () (gdb) bt #0 0x00002b87 in ?? () #1 0xa0001fd7 in main () (gdb) list 192 { 193 asm("int $3;"); 194 testSyscallMutex(); /home/taro/mona/test/monapi/mutex/mutex.cpp:193 { asm("int $3;"); a0001fd6: cc int3 /home/taro/mona/t…

GDB スタブを書いてみよう その7

gdb

fault0d ハンドラのエラーコードを見ると 0x1a だ。Intel のマニュアルに従って分解してみると IDT のエラーで IDT の Index = 3 だそうだ。 まずこのあたりのエラーをきちんと表示できるようにハンドラを改善。 結局は IDT に Gate Descriptor を設定すると…

GDB スタブを書いてみよう その6

gdb

行番号が出ない件 推測:gdb に読ませた実行ファイルに行番号情報が付属していないのだろうか? 検証 objdump -Sl すると % /usr/bin/i586-mingw32msvc-objdump -lS test/monapi/mutex/TMUTEX.EXE | head -n 30 ... asm("int $3;"); a0001fd6: cc int3 /home…

GDB でレジスタを見る

gdb

GDB でレジスタを表示するときに (gdb) info register rax # もしくは i r rax としていたが、レジスタは変数としても参照可能なことを知った。頭に $ をつけるだけ。 (gdb) print/x $rax 変数として参照できるので、操作の度に自動でレジスタを表示する dis…

gdbでmake

gdb

gdbで間違えて make コマンド実行したら動いた。 (gdb) make make: `all' に対して行うべき事はありません. なんだこれ?なぜ? まあうれしいのだけどね。