我想知道将异常断点调试器命令设置为以下命令时,在调试器中得到的内容是否有所不同:
po $ arg1
与
bt
如果是这样,您能否向我解释这些差异是什么,也许哪一个更有利(如果受益是有条件的,在什么情况下)?
我已经在教程中看到了两种建议,但是我不确定哪一种更好。谢谢。
最佳答案
bt
是thread backtrace
的一个有点花哨的lldb快捷方式。 bt
将向您显示使您到达断点的调用顺序。如果堆栈上的任何调用函数具有调试信息,则lldb还将向该函数输出参数。当您遇到断点时,这是最有用的操作,因为它可以回答更一般的“我在哪里”问题。po $arg1
是更专业的东西。$arg1
是lldb的缩写,用于将第一个参数传递给函数的寄存器。如果您使用的是函数的第一条指令,则该寄存器将保存调用该函数时传递的值。但是请注意,$arg1
实际上只是一个寄存器名称,因此,如果该寄存器被重用-例如,当您停止在函数中调用另一个函数时,传入的参数值将被覆盖。因此,如果您在函数的开头停止,$arg1
仅表示“第一个参数”。po
是expr -O --
的简写。它评估它传递的表达式,然后如果结果是ObjC或Swift对象,则调用运行时以检索该对象的自定义描述并进行打印。否则,它将打印该值。
因此,如果您停止在函数的开头,则po $arg1
将第一个参数的对象描述输出到该函数。最常见的用法是所有ObjC方法都将self
参数作为第一个参数。因此,如果您在方法的开头停止,po $arg1
将打印self
参数的对象描述。
关于ios - 断点调试器命令中的po $ arg1和bt之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54333831/