gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:40:23 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com