ios - 断点调试器命令中的po $ arg1和bt之间有区别吗?

标签 ios xcode debugging breakpoints crash-reports

我想知道将异常断点调试器命令设置为以下命令时,在调试器中得到的内容是否有所不同:

po $ arg1



bt

如果是这样,您能否向我解释这些差异是什么,也许哪一个更有利(如果受益是有条件的,在什么情况下)?

我已经在教程中看到了两种建议,但是我不确定哪一种更好。谢谢。

最佳答案

btthread backtrace的一个有点花哨的lldb快捷方式。 bt将向您显示使您到达断点的调用顺序。如果堆栈上的任何调用函数具有调试信息,则lldb还将向该函数输出参数。当您遇到断点时,这是最有用的操作,因为它可以回答更一般的“我在哪里”问题。
po $arg1是更专业的东西。
$arg1是lldb的缩写,用于将第一个参数传递给函数的寄存器。如果您使用的是函数的第一条指令,则该寄存器将保存调用该函数时传递的值。但是请注意,$arg1实际上只是一个寄存器名称,因此,如果该寄存器被重用-例如,当您停止在函数中调用另一个函数时,传入的参数值将被覆盖。因此,如果您在函数的开头停止,$arg1仅表示“第一个参数”。
poexpr -O --的简写。它评估它传递的表达式,然后如果结果是ObjC或Swift对象,则调用运行时以检索该对象的自定义描述并进行打印。否则,它将打印该值。

因此,如果您停止在函数的开头,则po $arg1将第一个参数的对象描述输出到该函数。最常见的用法是所有ObjC方法都将self参数作为第一个参数。因此,如果您在方法的开头停止,po $arg1将打印self参数的对象描述。

关于ios - 断点调试器命令中的po $ arg1和bt之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54333831/

相关文章:

javascript - Ember 组件查找/调试/测试

c# - Awesomium Winforms 在 VMWare 中不工作

ios - CFBundleVersion 必须是句号分隔的列表

ios - 未触发自定义 segue 的展开

xcode - iOS Swift 选项卡栏图标插入在运行时被删除

ios - swift : How to check if UserDefaults exists and if not save a chosen standard value?

javascript - 如何在客户端的浏览器/操作系统/系统上远程调试 jQuery 应用程序?

iOS - 是否可以判断应用程序二进制文件是针对哪个 Base SDK 编译的?

iphone - 表格 View 中的节数/行节数

swift - Xcode 居中图像,同时保持正方形