json文字列をファイルにうまく印刷するために、LLDB + pythonを試しています。与えられたのstd :: string変数(バッファそれを呼び出す)ために、私はかなりのファイルを印刷するためにPythonのブレークポイントのスクリプト内で次のことを試してみた - すべてが成功していない:C++:LLDB + Python - pythonスクリプトでstd :: stringを出力する方法
json.dump(frame.FindVariable("buffer"), handle, indent=4)
# ^^^^ error that SBValue* is not serializable
json.dump(frame.FindVariable("buffer").GetValue(), handle, indent=4)
# ^^^^ emits null
json.dump(frame.EvaluateExpression("buffer.c_str()"), handle, indent=4)
# ^^^^ error that SBValue* is not serializable
json.dump(frame.EvaluateExpression("buffer.c_str()").GetValue(), handle, indent=4)
# ^^^^ prints an address...not useful
json.dump(frame.EvaluateExpression("buffer.c_str()").GetData(), handle, indent=4)
# ^^^^ error that SBValue* is not serializable
誰が何を知っています魔法のソースは、json.dump()に渡すために、std :: stringフレーム変数をPython文字列に変換することを許可しますか?
OK - GetSummary()が近いじらすようにある - 埋め込まれた引用符のいくつかの余分なエスケープが起こっ持っているように見えますしたがって、jsonとしてロードしてダンプするPythonの機能を混乱させます。単に明らかにするために、std :: stringの内容は有効なjsonであり、解析できるはずです。私はそれが無効なjsonになる方法で出力のための文字列を消毒する場合、サマリー出力と思います。 文字列(例えば、.c_str()表現)の文字バッファを他の関数に渡すことができるネイティブのPython文字列に変換する方法が本当に必要です。 –
ああ、GetSummaryは、バイトではなくCコードで入力した文字列を表示するためのものです。文字列バッファの内容を直接読み取るには、バッファのアドレスを取得する必要があります(c_str()がそれを返します)、SBProcess.ReadCStringFromMemoryを使用します。 –
おかげ - ReadCStringFromMemoryは具体的には、トリックを行うようだ: \t JSTR = frame.GetThread()GetProcess()ReadCStringFromMemory。。(frame.EvaluateExpression( "buffer.c_str()")GetValueAsUnsigned()、0xFFFFFFの、E。) 私に使用できるpython文字列(jstr内)を与えてくれます。 'e'はlldb.SBError()型の変数です。この答えを正しいものとしてマークします。 –