10

GDBでは、「info line func_name」を使用してfunc_nameのメモリアドレスを取得し、「set $ PC=memory_address」を使用してこの関数のデバッグを開始できます。lldb内で同じことを行うにはどうすればよいですか?前もって感謝します!

4

1 に答える 1

18

lldbのコマンドは「画像検索」です。「infofunc」<->「imagelookup」の例が最近lldb/gdbコマンドページに追加されたと思います-http://lldb.llvm.org/lldb-gdb.html

例えば

(lldb) im loo -n puts
1 match found in /usr/lib/system/libsystem_c.dylib:
        Address: libsystem_c.dylib[0x0000000000011d9a] (libsystem_c.dylib.__TEXT.__text + 69850)
        Summary: libsystem_c.dylib`puts
(lldb) 

ここではlibsystem_c.dylib(0x11d9a)のオフセットのみが表示されていますが、実際のロードアドレスを確認するには、「-v」オプションを使用して画像を検索し、カバーを配置するアドレスの範囲を表示する必要があります。または、lldbのバックティック表記を使用してこれをより直接的に行うことができます。

(lldb) reg read pc
     rip = 0x0000000100000f2b  a.out`main + 11 at a.c:3
(lldb) reg write pc `(void(*)())puts`
(lldb) reg read pc
     rip = 0x00007fff99ce1d9a  libsystem_c.dylib`puts

OK lldbにはここで関数プロトタイプが必要だったので、puts()をキャストする必要がありました-あまり便利ではありませんが、それが不要な独自の関数の1つである場合:

(lldb) reg write pc `main`
(lldb) reg read pc
     rip = 0x0000000100000f20  a.out`main at a.c:2
于 2012-09-23T10:46:35.333 に答える