【问题标题】:lldb Xcode: error: 'printf' is not a valid commandlldb Xcode:错误:'printf' 不是有效命令
【发布时间】:2012-09-23 11:31:57
【问题描述】:

我正在使用 Xcode 4.3.3,我想设置符号端点。我为所有 objc_msgSend 符号创建了一个符号断点,我想将它与“调试器输出”结合起来。

我遵循了this post in SO 的提示。但是在我的调试器中,消息

错误:'printf' 不是有效命令。

出现。有什么线索吗?我希望为每个函数调用一条消息 [Class method] 打印在调试器区域中。像这样

[UIApplication sharedApplication]
[UIApplication _isClassic]
[NSCFString getCString:maxLength:encoding:]
[UIApplication class]
[SLSMoleculeAppDelegate isSubclassOfClass:]
[SLSMoleculeAppDelegate initialize]

【问题讨论】:

    标签: ios xcode lldb


    【解决方案1】:

    如果您在断点设置中的调试器命令前加上“expr --”前缀,则它适用于 lldb:

    expr -- (void)printf("[%s, %s]\n",(char *) object_getClassName(*(long*)($esp+4)), (char *) *(long *)($esp+8) )
    

    然而,解决方案并不完美,因为调试器在每次输出后都会打印“no result”:

    [OS_xpc_dictionary, _xref_dispose]
    <no result>
    [NSObject, initialize]
    <no result>
    [OS_object, initialize]
    <no result>
    

    我没有找到抑制“no result”输出的方法,可能是不可能的,见this Open Radar

    【讨论】:

    • 看起来 Sean Callanan 几个月前在评估返回 void 的表达式时修复了 lldb 源中的“无结果”输出 - 尽管此更改尚未包含在 Xcode 版本中。诉lists.cs.uiuc.edu/pipermail/lldb-commits/Week-of-Mon-20120806/…
    • @JasonMolenda:感谢您提供的信息。我刚刚用 LLDB-167.4 测试了它,它是当前 Xcode 4.5.1 的一部分,仍然打印“no result”。
    • 是的,他的签入时间比那个版本更新; lldb-168 及更高版本应该有这个变化。
    • 顺便说一句,从 8 月初开始的更改不在 10 月初发布的原因是与发布分支有关……lldb-167.2 于 9 月在 Xcode 4.5 中发布; Xcode 4.5.1 是一个 dot 版本,用于修复一些漏掉的错误。他们一定是决定在 4.5.1 版本的 lldb 中包含一个或两个修复程序,因此他们将这些孤立的补丁复制到 lldb-167 分支中,并在 9 月下旬制作了一个 lldb-167.4。他们没有导入过去两个月内的所有更改,只导入了孤立的修复,因此没有引入其他错误。下一个大版本应该包括修复。
    • @BarrettJ:是在 64 位还是 arm 上?那么这可能会有所帮助:stackoverflow.com/a/16346300/1187415.
    猜你喜欢
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 2015-07-02
    • 2014-05-05
    • 2013-05-28
    相关资源
    最近更新 更多