【问题标题】:lldb cannot evaluate function because of unknown identifier由于未知标识符,lldb 无法评估函数
【发布时间】:2013-11-12 02:07:06
【问题描述】:

我有一个优化的二进制文件,它具有 c++ 结构和类,我可以为它们导出符号并为类函数设置断点,但是,我似乎无法做这样的基本操作:expr ((ns::SomeClass*)$r0)->toString() lldb 报告 ns 的未知标识符。

通过一些谷歌搜索,我发现了一些关于 expr 前缀文件的内容,并尝试编写一个描述命名空间的标题,但我仍然得到同样的错误。也许我做错了,或者 lldb 的另一个功能允许这样做?

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

前缀.mm

namespace ns { }

【问题讨论】:

    标签: c++ llvm lldb


    【解决方案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()
    

    【讨论】:

    • 我能够得到这个工作,谢谢!我之前的尝试非常接近,但是我的前缀文件中有一些其他的东西导致 lldb 无法使用它。我完全可以直接使用名称 mangle,感谢您的提示!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    相关资源
    最近更新 更多