2017-01-14 14 views
2

私は、MacOS上でクローズドソースのコマンドラインツールで曖昧な問題をデバッグしようとしています。私はこの問題を確認したいので、LLDBを起動し、フレームワークのメソッドの1つにブレークポイントを設定しようとしましたが、どうすればよいかわかりません(LLDBは、それは壊れてしまい、私は記憶場所で止めることはできません)。 LLDBでフレームワークのコードをデバッグする方法について、誰かが正しい方向で私を指摘できますか?LLDBでストリッピングされたバイナリにブレークポイントを設定する

編集:問題はフレームワークではなく、剥奪されているようです。下の私の答えを見てください。

+0

あなたが試したことのいくつかの例とあなたが打ち破ろうとしているシンボル名を教えてもらえますか?そうでなければ何がうまくいかないのかと推測するのは難しいです。 –

+0

もう少し詳しく:私はMacで位置情報サービスに問題があります(私はそれを有効にできません)。私はclass-dump + LLDBがこの問題を明らかにすることを期待していました。 LLDBでシステム環境設定を実行すると、有望なメソッドにアタッチしようとしましたが、コードがPreference PaneまたはFrameworkにあり、LLDBがメインバイナリではないので、 'b - [SomeClass someSelector]'は機能しません。それを見つける。 'rbreak someSelector'を使うとメソッドが見つけられ、ブレークポイントがそこに置かれますが、ブレークポイントは必要なときには起動されません。 –

+0

あなたがしようとしているような音がうまくいくはずです。このようにブレークポイントを設定した後、 "ブレークリスト"とは何ですか? BTW、将来の参考のために、特定のセレクタのすべてのインスタンスを中断したい場合は、 "break set -S someSelector"と言うことができますが、この場合は違いはありません。 –

答えて

0

私は最終的に、私が使っていたフレームワークにはデバッグシンボル(doh!)がないことに気づいたので、LLDBは何も見つけられませんでした。削除されたバイナリを扱う作業はもう少し時間がかかり、Apple Technical Note 2239はObjective-Cランタイムを使ってブレークポイントを設定します。

$ lldb /Applications/TextEdit.app 
GNU gdb 6.3.50-20050815 (Apple version gdb-1346) […] 
(lldb) target create "/Applications/TextEdit.app" 
Current executable set to '/Applications/TextEdit.app' (x86_64). 
(lldb) r 
Process 2463 launched: '/Applications/TextEdit.app/Contents/MacOS/TextEdit' (x86_64) 
Process 2463 stopped 
* thread #1: tid = 0x437c7a, 0x00007fffea1603ba libsystem_kernel.dylib`mach_msg_trap + 10, stop reason = signal SIGSTOP 
    frame #0: 0x00007fffea1603ba libsystem_kernel.dylib`mach_msg_trap + 10 
libsystem_kernel.dylib`mach_msg_trap: 
-> 0x7fffea1603ba <+10>: ret 
    0x7fffea1603bb <+11>: nop 

libsystem_kernel.dylib`mach_msg_overwrite_trap: 
    0x7fffea1603bc <+0>: mov r10, rcx 
    0x7fffea1603bf <+3>: mov eax, 0x1000020 
(lldb) # Try to find the 
(lldb) # -[DocumentController openUntitledDocumentAndDisplay:error:] 
(lldb) # symbol. 
(lldb) break set -S openUntitledDocumentAndDisplay:error: 
Breakpoint 1: where = AppKit`-[NSDocumentController openUntitledDocumentAndDisplay:error:], address = 0x00007fffd21d244f 
(lldb) # These are not the droids we're looking for. It turns out that 
(lldb) # TextEdit ships with its symbols stripped, so we'll have to do 
(lldb) # this the hard way. 
(lldb) # 
(lldb) # Get the Class object for the DocumentController class. 
(lldb) expr -- void *$class = (void *)objc_getClass("DocumentController") 
(lldb) # Get the SEL object for the "openUntitledDocumentAndDisplay:error:" method. 
(lldb) expr -- void *$sel=(void *)sel_getUid("openUntitledDocumentAndDisplay:error:") 
(lldb) # Get a pointer to the method implementation. 
(lldb) po (void*)class_getMethodImplementation($class, $sel) 
0x0000000100006df4 
(lldb) # Set a breakpoint on the method. 
(lldb) b 0x0000000100006df4 
Breakpoint 2: where = TextEdit`___lldb_unnamed_symbol74$$TextEdit, address = 0x0000000100006df4 
(lldb) # Resume execution, and then create a new, untitled document. 
(lldb) c 
Process 2463 resuming 
Process 2463 stopped 
* thread #1: tid = 0x437c7a, 0x0000000100006df4 TextEdit`___lldb_unnamed_symbol74$$TextEdit, queue = 'com.apple.main-thread', stop reason = breakpoint 2.1 
    frame #0: 0x0000000100006df4 TextEdit`___lldb_unnamed_symbol74$$TextEdit 
TextEdit`___lldb_unnamed_symbol74$$TextEdit: 
-> 0x100006df4 <+0>: push rbp 
    0x100006df5 <+1>: mov rbp, rsp 
    0x100006df8 <+4>: push r15 
    0x100006dfa <+6>: push r14 
関連する問題