由于未知标识符,lldb无法计算函数 我有一个优化的二进制,它有C++的结构和类,我可以导出类函数的符号和设置断点,但是,我不能做这样的基本的事情: EXPR((NS:SOMCELASS *)$R0)-> toStrug()/ lldb报告ns的未知标识符

由于未知标识符,lldb无法计算函数 我有一个优化的二进制,它有C++的结构和类,我可以导出类函数的符号和设置断点,但是,我不能做这样的基本的事情: EXPR((NS:SOMCELASS *)$R0)-> toStrug()/ lldb报告ns的未知标识符,c++,llvm,lldb,C++,Llvm,Lldb,在一些google搜索中,我发现了一些关于expr前缀文件的信息,并试图编写一个描述名称空间的头,但仍然收到相同的错误。也许我做错了,或者lldb的另一个特性允许这样做 我的前缀文件非常简单,我只是想看看我是否能通过未知的标识符位,找到应用于SomeClass的错误 前缀为.mm namespace ns { } 对于这类事情,使用损坏的名称并直接传递“this”指针来调用它可能更容易,即: (lldb) expr (const char *) _ZN2ns9SomeClass8toStrin

在一些google搜索中,我发现了一些关于expr前缀文件的信息,并试图编写一个描述名称空间的头,但仍然收到相同的错误。也许我做错了,或者lldb的另一个特性允许这样做

我的前缀文件非常简单,我只是想看看我是否能通过未知的标识符位,找到应用于SomeClass的错误

前缀为.mm

namespace ns { }

对于这类事情,使用损坏的名称并直接传递“this”指针来调用它可能更容易,即:

(lldb) expr (const char *) _ZN2ns9SomeClass8toStringEv($r0)
否则,您必须在前缀文件中放入该类及其方法的空心版本,即:

 > cat prefix.h 
   namespace ns
   {
       class SomeClass
       {
       public:
           const char *toString();
       };
   }
这将允许您执行以下操作:

(lldb) expr ((ns::SomeClass *)$rdi)->toString()

对于这类事情,使用损坏的名称并直接传递“this”指针来调用它可能更容易,即:

(lldb) expr (const char *) _ZN2ns9SomeClass8toStringEv($r0)
否则,您必须在前缀文件中放入该类及其方法的空心版本,即:

 > cat prefix.h 
   namespace ns
   {
       class SomeClass
       {
       public:
           const char *toString();
       };
   }
这将允许您执行以下操作:

(lldb) expr ((ns::SomeClass *)$rdi)->toString()

我能让它工作,谢谢!我之前的尝试非常接近,但是我的前缀文件中有一些其他东西使得lldb无法使用它。我完全可以直接使用mangle这个名字,谢谢你的提示!我能让它工作,谢谢!我之前的尝试非常接近,但是我的前缀文件中有一些其他东西使得lldb无法使用它。我完全可以直接使用mangle这个名字,谢谢你的提示!