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 回答