1

現在、KDbg / gdb を使用して、http: //www.kernelthread.com/projects/hanoi//html/asm.html (優れたリソース)からハノイの塔のソース コードをデバッグしようとしています。

この問題でスタックの使い方を見直したかったので、NASMでアセンブルし、GCCでリンクしました。しかし、KDbg では、現在の実行ポイントが更新されていないことに気付きました (つまり、ファイル内のどこにいるかわかりませんでした)。KDbg は gdb に依存しているため、gdb 内でコードを実行して、同様の問題が発生するかどうかを確認しました。

プログラムの 30 行目 (メイン関数内の行) にブレークポイントを設定すると、次のようになります。

(gdb) break 30
Breakpoint 2 at 0x804840b: file hanoi.asm, line 30.
(gdb) next
Single stepping until exit from function main,
which has no line number information.

私は現在、私が書いた次の小さなスクリプトを使用してアセンブリをコンパイルしています (おそらく make ファイルに移行する必要がありますが、これは今までうまくいきました)。

bschlinker@net1develop02:~/.scripts$ cat asmgcc
# /usr/bin/sh

nasm -f elf -g -F stabs $1.asm -l $1.lst
gcc -g $1.o -o $1

CentOS から Ubuntu に移行したばかりなので、これがなじみのない OS 環境の問題なのか、別の問題なのかわかりません。

いつものように、ご協力いただきありがとうございます。

4

2 に答える 2

2

-F dwarfの代わりに試してください-F stabs

于 2010-11-15T00:43:32.237 に答える
0

で組み立てられas -o tmp.o something.s && ld -s -o something tmp.o && rm tmp.oます。gdb just display/8i *$eip(または64 ビットの場合はrip ) では、すべてのステップで命令ポインターの後に 8 つの命令が表示されます。したがって、デバッグ情報はまったく必要ありません;-)

于 2010-11-15T01:07:52.733 に答える