XcodeとlldbとPythonインタプリタの間には、残念なことに、対話型コンソールにいくつかの問題があります。 http://bugreport.apple.com/にバグレポートを提出してください - この特定の問題に関するバグレポートが既にあるかどうかはわかりませんが、一般的な問題はわかっています。インタラクティブなPythonスクリプティングインタフェースを調べる場合は、コマンドラインlldbツールを使用することができます。それがうまくいく。
lldbのすべてのPythonスクリプトを~/lldb
に入れました。私の~/.lldbinit
ファイルでは、私はそれらを調達。例えば、私はそれは私が望んだ場合、私は、それを自動的にロードするために、私の~/.lldbinit
ファイルにcommand script import
を置く
import lldb
# Use this like
# (lldb) command script import ~/lldb/stopifcaller.py
# (lldb) br s -n bar
# (lldb) br comm add --script-type python -o "stopifcaller.stop_if_caller(frame, 'foo')" 1
def stop_if_caller(current_frame, function_of_interest):
thread = current_frame.GetThread()
if thread.GetNumFrames() > 1:
if thread.GetFrameAtIndex(1).GetFunctionName() != function_of_interest:
thread.GetProcess().Continue()
ある~/lldb/stopifcaller.py
を持っています。この特定の例では、Pythonコマンドをブレークポイント#1に追加します。lldbがブレークポイントで停止すると、呼び出し元の関数を調べます。呼び出し元の関数がfoo
でない場合、自動的に実行を再開します。本質的に、ブレークポイント1は、foo()がbar()を呼び出す場合にのみ停止します。 command script import ~/...
でXcode 4.5 lldbに問題がある可能性があることに注意してください。ホームディレクトリ(/Users/benwad/
など)へのフルパスを入力する必要があります。私は確かに覚えていません - しばらくの間固定されているXcode 4.5でチルド展開の問題がいくつかありました。
~/.lldbinit
に簡単なタイプの要約を直接追加することができます。たとえば、lldb自体をデバッグしている場合、ConstString
オブジェクトには、通常はm_string ivarという関心のあるフィールドが1つしかありません。だから私は
type summary add -w lldb lldb_private::ConstString -s "${var.m_string}"
を持っているか、それはタイプaddr_t
だ場合、私はいつもあなたがlldbに新しいコマンドを追加したい場合は、フォーマットの六角ように、私は
type format add -f x lldb::addr_t
を持っていることをしたい、あなたのpythonを持っているでしょう
import lldb
def say_hello(debugger, command, result, dict):
print 'hello'
def __lldb_init_module (debugger, dict):
debugger.HandleCommand('command script add -f sayhello.say_hello hello')
、~/lldb/sayhello.py
のようなファイルと、あなたは
のようlldbしそれをロードします
あなたはPythonで書かれたコマンドを追加しているときに、コマンドオプションの解析を行うことができますので、あなたがshlex
とoptparse
ライブラリを使用します、そしてあなたが__doc__
文字列を追加しますほとんどの時間 - 私は維持するためにそれらのものを省略単純な例です。
ありがとうございます!私を始めるための非常に有用な情報。 – benwad
'lldb'' python'スニペットを使ってgithubリポジトリを作成することはありませんか? (私は見て、1つ見ていない...ファンシーなものを開始?)私はそれが非常に興味深いと思う。 – trojanfoe
私は本当にこのようなことのための最良の場所になるだろう、簡単な問題の集まりとその解決策を使って、lldbのWebサイトにcookbook形式の文書を追加する必要があると思います。しかし、時間の欠如。 :( –