LLDB:打印变量在每次调用时传递给函数?

时间:2013-12-15 22:20:42

标签: c macos cocoa function lldb

OS X有一个名为MobileDevice的无证(私有)框架。它用于从iOS设备获取数据。我正在编写使用它的应用程序,我希望能够在iOS设备的电池上提取充电次数。在MobileDevice中执行此操作的函数称为AMDeviceCopyValue()。它需要3个参数:设备的地址(只是一个整数),您要复制的值的域(C字符串),以及您要复制的值的键(另一个C字符串。 )

由于没有记录此框架,因此很难找到您需要使用的字符串。其中一些已在网上发布,但不是计算充电周期的一个。我在网上发现的另一个程序已经这样做了,iCopyBot:http://www.icopybot.com/blog/check-ipad-iphone-battery-charge-cycle-count-without-jailbreaking.htm

我想在LLDB中启动iCopyBot,然后让LLDB打印出每次调用时iCopyBot传递给AMDeviceCopyValue()的域和关键参数。该框架对时间敏感,所以我不能让它停止执行中 - 它只需要打印传递的参数并继续运行。

有谁能告诉我我必须做什么?我已经设法在LLDB中启动iCopyBot并且每次调用该函数时都设置了一个断点,但命令“frame variable”不会为我打印任何内容(我从Apple网站上获取的LLDB文档)建议它应该打印传入的参数......它对我不起作用。)

1 个答案:

答案 0 :(得分:10)

在H2CO3的问题评论中推测从我的讨论中学到的东西:

您可以通过键入以下命令在LLDB中加载您想要的任何程序:

lldb <path to application executable>

要在函数上设置断点,请在lldb启动后输入以下命令:

breakpoint set -b <name of function>

要在lldb中实际启动程序,请在加载后输入以下内容并输入所需的断点:

run

要在断点处查看变量,即使没有调试器符号(IE,因为这不是您拥有源的程序),也要键入:

register read

如果列表中的任何内容看起来像是CoreFoundation或Obj-C对象,请输入以下内容:

po <register of object>

最后,如果你认为其中一个变量指向了C字符串,你可以使用它:

p (char*)<register of string>

你能用lldb做的事情比我在这里说的要多得多。只需在lldb提示符下键入help即可查看更多内容。这涵盖了我昨天第一次发布这个问题时想知道的一切。