1

クラス関数のシンボルをエクスポートしてブレークポイントを設定できる C++ 構造とクラスを含む最適化されたバイナリがありますが、次のような基本的なことはできないようです: expr ((ns::SomeClass*)$r0)->toString() lldb は ns の不明な識別子を報告します。

いくつかのグーグル検索から、exprプレフィックスファイルについて何かを見つけ、名前空間を説明するヘッダーを書き込もうとしましたが、それでも同じエラーが発生します。おそらく私はそれを間違っているか、これを可能にするlldbの別の機能がありますか?

私の接頭辞ファイルは非常に単純で、不明な識別子ビットを通過して、SomeClass に適用されたエラーに到達できるかどうかを確認したかっただけです。

プレフィックス.mm

namespace ns { }
4

1 に答える 1

1

この種の場合、マングルされた名前を使用してこれを呼び出し、「this」ポインターを直接渡す方が簡単かもしれません。

(lldb) expr (const char *) _ZN2ns9SomeClass8toStringEv($r0)

それ以外の場合は、クラスとそのメソッドの中空バージョンをプレフィックス ファイルに配置する必要があります。つまり、次のようになります。

 > cat prefix.h 
   namespace ns
   {
       class SomeClass
       {
       public:
           const char *toString();
       };
   }

これにより、次のことが可能になります。

(lldb) expr ((ns::SomeClass *)$rdi)->toString()
于 2013-11-05T23:15:59.347 に答える