我最近在运行我的iOS应用程序,我在调试控制台中看到了这个:
warning: 'libsystem_network' contains a debug script. To run this script in this debug session:
command script import "/usr/lib/system/libcompiler_rt.dylib"
To run all discovered debug scripts in this session:
settings set target.load-script-from-symbol-file true
我忽略了它,因为我不知道它是什么,从那时起就没有得到任何类似的东西。我用Google搜索,但一无所获。这是什么意思?
答案 0 :(得分:3)
您可以将Python脚本放在自动加载的.dSYM
包中。在调试会话中需要dSYM时执行。非常方便为您的项目定义自定义格式化程序,许多人在调试框架时使用的自定义命令等。这会引入一些明显的安全问题,因此默认情况下lldb不会自动加载&执行这些文件 - 而不是打印上面看到的消息。
在您的特定情况下,我认为即使您的任何dSYM中没有Python资源文件,也可以看到此消息,这是一个非常罕见的错误。请注意,消息显示/usr/lib/system/libcompiler_rt.dylib
中有Python - 但当然没有,这是一个共享库。
例如,这里是我如何创建一个python文件,它将在加载时在main上设置断点:
% echo 'int main () {}' > a.c
% clang -g a.c
% mkdir a.out.dSYM/Contents/Resources/Python
% cat > a.out.dSYM/Contents/Resources/Python/a_out.py
def __lldb_init_module(debugger, internal_dict):
debugger.HandleCommand("br s -n main")
^D
% lldb a.out
warning: 'a' contains a debug script. To run this script in this debug session:
command script import "/private/tmp/a.out.dSYM/Contents/Resources/Python/a_out.py"
To run all discovered debug scripts in this session:
settings set target.load-script-from-symbol-file true
Current executable set to 'a.out' (x86_64).
(lldb) settings set target.load-script-from-symbol-file true
Breakpoint 1: where = a.out`main + 9 at a.c:1, address = 0x0000000100000f99
(lldb)
我不得不调用脚本a_out.py
,因为python文件名中不能有任何.
个字符。但除此之外,它非常清楚。
如果你想谨慎对待,可以将settings set target.load-script-from-symbol-file true
行放在~/.lldbinit
文件中 - 但是大多数时候,你可以在运行时启用它,命令将加载,就像你在上面的例子中看到的那样。
唯一需要注意的是Python文件是否定义了自己的OperatingSystem插件。用户进程调试很少非常。在这种情况下,为了从初始连接中正确操作,您需要通过~/.lldbinit
文件启用脚本加载,以便在第一个停止事件中正确初始化/使用OS插件。此问题不适用于进行普通用户进程应用程序/程序调试的人员。
在上面的具体示例中,您似乎有一个libsystem_network.dylib
或libcompiler_rt.dylib
(您的示例提到两者)与相关的dSYM包,并且该dSYM中必须有一个python资源文件。