2017-06-19 7 views
0

オープンな問題は、C/C++に移行する言語でLLDBを使用する方法です。私が欲しいのはそのlldbは、スタックトレースでよりよい関数名やよりよいローカル/グローバル変数の名前を示して、それlldbに接続するには?

  • インターセプトシンボルは、デマングルように、PythonスクリプトでデフォルトのLLDB機能にフックすることです。
  • は、事前に名前がわかっていないタイプを処理するデータフォーマットを傍受し、type summary addで処理できません。 "マッチング"は、構造体を検査することによって実行する必要があります。
  • は、正しいソース/行にマップするためのC/C++ではなく、元の言語ファイルの "create breakpoint"要求を傍受します。

究極の目標は、それをサポートするために、LLDBにPythonスクリプトを提供することです。そのため、多数のUI LLDBフロントエンド(XCode、VSCodeなど)が自動的に恩恵を受けます。

EDIT:すべての型をすべてのSBCompileModuleから取得し、検査し、構文フォーマッタを提供することによって、型の問題を解決することができました。シンボル「デエングリング」とブレークポイントのマッピングは依然として問題です。

答えて

1

.*に一致する正規表現マッチングフォーマッタを追加することもできます。 lldbは正規表現以外のマッチャを最初に試すので、組み込みのフォーマッタに取って代わることはありません。正規表現マッチャーは静的なパターンマッチよりも遅いですが、あなたの目的のためにはまだ受け入れられているかもしれませんし、アプリが大きければ、アプリでタイプごとに1つのフォーマッターを追加した結果よりもはるかに悪くないかもしれません。これは実装する方が簡単かもしれません。カスタムバックトレースの印刷を作るために - あなたのデマングルを含む - 出力をバックトレースする:

あなたが(http://lldb.llvm.org/formats.htmlここで説明)script.thread.python_function & script.frame.pythonスレッド&フレームフォーマットを使用することができます。

Pythonからカスタムdemanglerを提供する方法はありません。そして、シンボル印刷は、スレッド&のフレーム印刷の方法であるフォーマッタでは行なわれないので、介入する方法はありません。私は外からこれをする良い方法を見ることができません。

現在、Pythonでブレークポイントリゾルバカーネルを書き込むプラグイン可能な方法はありませんが、lldbはそれを可能にするように設計されています。ただし、#file & #line宣言をC/C++ソースに出力するようにトランスコーダを設定できる場合、これらの再マッピングはデバッグ情報に入り、lldbがそれらを取得できるようになります。

関連する問題