0

Linux で C++ をコーディングするときは、Eclipse CDT を使用します。C/C++ OS 関数にステップインすると、アセンブラーが表示されますが、ファイルがすべて /usr/include/ に格納されていることを考えると、デバッガーが C/C++ の各行にステップインすると思いました。

では、OS 関数の C/C++ にステップ インできる Linux で C++ をデバッグする方法はありますか?

4

1 に答える 1

1

はい、Linux で gdb (GNU デバッガー) を使用して実行できます。インターフェースは非常に失礼ですが、仕事はします。ちょっとした例: まず、gdb を起動します。

gdb your_program

次に、あなたはその中にいます。

....
Reading symbols from foobar...done.
(gdb) start # begin the debug session
...
(gdb) disas # show the disassembly code of the current function (main)
.... # lot of asm
0x00000000004007d4 <+17>:    call   0x400440 <malloc@plt>
0x00000000004007d9 <+22>:    mov    QWORD PTR [rax],0x0
0x00000000004007e0 <+29>:    push   rax
... # lot of asm
(gdb) break *0x4007d4 # set a break point at the address of the call malloc
Breakpoint 2 at 0x4007d4
(gdb) run # run until breakpoint
...
Breakpoint 2, 0x00000000004007d4 in main () # the breakpoint has been reached
=> 0x00000000004007d4 <main+17>:        e8 67 fc ff ff  call   0x400440 <malloc@plt>
(gdb) si # step into the malloc
0x0000000000400440 in malloc@plt ()
=> 0x0000000000400440 <malloc@plt+0>:   ff 25 92 11 20 00       jmp    QWORD PTR [rip+0x201192]        # 0x6015d8 <malloc@got.plt> # you see code from malloc now
(gdb) ni # next instruction in malloc
...
(gdb) finish # quit the current function, actually malloc
(gdb)

ただし、対応する高レベルのソース コードを簡単に表示することはできません。あなたができる最善のことは、ライブラリ/カーネル コードを同時に読むことです。

たとえば、glibc (GNU 標準 C ライブラリ) から malloc のコードを読むことができますmalloc/malloc.c

于 2013-06-18T19:07:35.953 に答える