2016-05-18 20 views
1

LLDBデータフォーマッタを作成しましたが、ログ出力がXcode lldbコンソールに表示されませんでした。 data formatter examplesはロガーを作成し、そのように書き込み:LLDBデータフォーマッタでコンソールにログする方法

def __init__(self, valobj, dict): 
    logger = lldb.formatters.Logger.Logger() 
    ... 
    logger >> "Providing synthetic children for a vector named " + str(valobj.GetName()) 

私はそれをやったと私は、変数(例えばframe var x付き)を印刷したとき、私はlldbフォーマッタは、コマンド

log enable -g lldb formatters 

でログイン有効私はデバッグ出力をたくさん見ましたが、私のものではありませんでした。

答えて

0

私はこれをより詳しく理解しました。

  1. ですべてのログを有効にするには、ソース自体から引用0より大きな値にlldb.formatters.Logger._lldb_formatters_debug_levelを設定する必要があります:あなたは1より大きい任意の値にそれを定義した場合

    • 、ログは自動的に書き込まれるたびに自動的にフラッシュされます(遅くなりますが、クラッシュしてもほとんどのものがログに記録されます)
    • 2以上の任意の値に定義すると、呼び出し関数の詳細はオートマticallyデフォルトで
  2. (さらに遅いが、追加の詳細を提供)ログに記録され、lldb.formatters.Loggerは標準出力に出力します。 Xcodeでデバッグしている場合、lldbのstdoutストリームは表示されません。ファイルにログする場合は、lldb.formatters.Logger._lldb_formatters_debug_filenameを目的のファイル名に設定します。注意:ファイルが書き込み可能であることを確認する必要があります。シェル拡張を必要とするパスにファイルを設定しないでください(例えば、〜/ logfile.logが機能しない、Pythonが〜を展開しないなど)。要約すると

、私__lldb_init_moduleは次のようになります。

def __lldb_init_module(debugger, internal_dict): 
    lldb.formatters.Logger._lldb_formatters_debug_level = 2 
    lldb.formatters.Logger._lldb_formatters_debug_filename = "/Users/Shared/lldb.py.log" 

    # followed by debugger.HandleCommand(...) 
0

LLDBは、独自のロギングメカニズムのためのSBのAPIを公開していないので、lldb.formatters.Loggerコマンド

を「有効ログ」から分離されたログ・ロジックを使用しています残念ながら、既知の問題

です

データフォーマッタを書くときにデバッグするだけであれば、フォーマッタ本体の中に "print"ステートメントを使用することができます。

+0

しかし、ここでこれらはに印刷できますか?私はいつもファイルに印刷することができますが、より洗練されたソリューションがあることを願っています。 – Sebastian

+0

またはlldb.formatters.Loggerを便利な場所に誘導できますか? – Sebastian

+0

私は参照してください:printはstdoutに行きますが、Xcodeがlldbを起動したときには表示されません。そして、 '_lldb_formatters_debug_filename'を設定してログファイルに出力することができます。 – Sebastian

関連する問題