Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C LLDB:每次打印传递给函数的变量';这叫什么?_C_Macos_Cocoa_Function_Lldb - Fatal编程技术网

C LLDB:每次打印传递给函数的变量';这叫什么?

C LLDB:每次打印传递给函数的变量';这叫什么?,c,macos,cocoa,function,lldb,C,Macos,Cocoa,Function,Lldb,OSX有一个未记录(私有)的框架叫做MobileDevice。它用于从iOS设备获取数据。我正在编写一个使用它的应用程序,我希望能够提取iOS设备电池的充电周期数。在MobileDevice中执行此操作的函数称为AMDeviceCopyValue()。它有3个参数:设备的地址(一个整数)、要复制的值的域(一个C字符串)和要复制的值的键(另一个C字符串) 因为这个框架没有文档记录,所以很难找到需要使用的字符串。其中一些已经发布在网上,但不是用来计算充电周期的。我在网上找到的另一个程序已经做到了这一

OSX有一个未记录(私有)的框架叫做MobileDevice。它用于从iOS设备获取数据。我正在编写一个使用它的应用程序,我希望能够提取iOS设备电池的充电周期数。在MobileDevice中执行此操作的函数称为AMDeviceCopyValue()。它有3个参数:设备的地址(一个整数)、要复制的值的域(一个C字符串)和要复制的值的键(另一个C字符串)

因为这个框架没有文档记录,所以很难找到需要使用的字符串。其中一些已经发布在网上,但不是用来计算充电周期的。我在网上找到的另一个程序已经做到了这一点,iCopyBot:

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


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

要猜测我在对H2CO3问题的评论中从讨论中学到了什么:

通过键入以下命令,可以在LLDB中加载所需的任何程序:

lldb <path to application executable>
要在断点处查看变量,即使没有调试器符号(即,因为这不是您要输入源代码的程序),请键入:

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

po <register of object>
po
最后,如果您认为其中一个变量指向一个C字符串,您可以使用:

p (char*)<register of string>
p(char*)

你可以用lldb做的事情比我在这里介绍的要多得多。只需在lldb提示符中键入
help
,就可以了解它的更多功能。这涵盖了我昨天第一次发布此问题时想知道的所有内容。

要猜测我在H2CO3问题评论中从讨论中学到了什么:

通过键入以下命令,可以在LLDB中加载所需的任何程序:

lldb <path to application executable>
要在断点处查看变量,即使没有调试器符号(即,因为这不是您要输入源代码的程序),请键入:

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

po <register of object>
po
最后,如果您认为其中一个变量指向一个C字符串,您可以使用:

p (char*)<register of string>
p(char*)

你可以用lldb做的事情比我在这里介绍的要多得多。只需在lldb提示符中键入
help
,就可以了解它的更多功能。这涵盖了我昨天第一次发布此问题时想知道的所有内容。

您可以在
AMDeviceCopyValue
上设置断点,并在程序处于暂停状态时打印参数。@H2CO3-调用函数时,我已设法使其暂停,但“frame variable”无法为我打印任何内容。由于这是我们正在讨论的C函数,我不认为源代码中使用的变量名会留在编译后的代码中,是吗?只有当所讨论的函数所在的模块已使用调试符号编译时。@H2CO3-好的,所以。。。让我们假设他们不再有名字。如何打印它们的值?它们仍然是C字符串,根据我迄今为止看到的有效参数,我假设我能够从它们中获得一些东西(到目前为止我看到的域参数总是以
com.apple.something
的形式出现,而关键参数总是以驼格英语出现,比如BatteryCharge。我假设其他参数也会类似。)然后就有点复杂了,基本上你需要查阅平台上的ABI文档,找出每个参数的存储位置(例如,在x64上,第一个参数进入RDI)。然后,有了这些信息,您就可以使用调试器来调试。g
print$rdi
以获取该寄存器中的值。当程序处于暂停状态时,您可以在
AMDeviceCopyValue
上设置断点并打印参数。@H2CO3-调用函数时,我已设法使其暂停,但“frame variable”无法为我打印任何内容。由于这是我们正在讨论的C函数,我不认为源代码中使用的变量名会留在编译后的代码中,是吗?只有当所讨论的函数所在的模块已使用调试符号编译时。@H2CO3-好的,所以。。。让我们假设他们不再有名字。如何打印它们的值?它们仍然是C字符串,根据我迄今为止看到的有效参数,我假设我能够从它们中获得一些东西(到目前为止我看到的域参数总是以
com.apple.something
的形式出现,而关键参数总是以驼格英语出现,比如BatteryCharge。我假设其他参数也会类似。)然后就有点复杂了,基本上你需要查阅平台上的ABI文档,找出每个参数的存储位置(例如,在x64上,第一个参数进入RDI)。然后,有了这些信息,您就可以使用调试器来调试。g
print$rdi
以获取该寄存器中的值。