GDB/LLDB 在指定的 module/shared 库的所有函数处中断
GDB/LLDB break at all functions of specified module/shared library
在lldb
中,我得到了help breakpoint set
:
-a <address-expression> ( --address <address-expression> )
Set the breakpoint at the specified address. If the address maps uniquely to a particular binary, then the address will be converted to a "file" address, so that the
breakpoint will track that binary+offset no matter where the binary eventually loads. Alternately, if you also specify the module - with the -s option - then the
address will be treated as a file address in that module, and resolved accordingly. Again, this will allow lldb to track that offset on subsequent reloads. The
module need not have been loaded at the time you specify this breakpoint, and will get resolved when the module is loaded.
和
-r <regular-expression> ( --func-regex <regular-expression> )
Set the breakpoint by function name, evaluating a regular-expression to find the function name(s).
和
-s <shlib-name> ( --shlib <shlib-name> )
Set the breakpoint only in this shared library. Can repeat this option multiple times to specify multiple shared libraries.
现在我想在指定 module/dylib 的每个函数处设置断点,您可以在命令 image list -f
.
的结果中找到这些函数
以libobjc.A.dylib
和MyOwn.dylib
为例。我尝试了以下命令但失败了:
(lldb) breakpoint set -r libobjc.A.dylib
Breakpoint 1: no locations (pending).
WARNING: Unable to resolve breakpoint to any actual locations.
(lldb) b +[ThunderManager load]
Breakpoint 2: where = MyOwn.dylib`+[ThunderManager load] +16 at ThunderManager.m:20, address = 0x000000010489f274
(lldb) breakpoint set -r MyOwn.dylib`*
Breakpoint 3: no locations (pending).
WARNING: Unable to resolve breakpoint to any actual locations.
我希望 lldb
在模块 libobjc.A.dylib
或 MyOwn.dylib
或任何其他指定的已加载 module/shared 库的所有功能上中断。如何在lldb
?
中设置断点
(lldb) break set -r . -s libobjc.A.dylib
-s
选项取一个共享库作为它的值,它将断点限制在指定的共享库上。您可以多次指定 -s
选项以指定多个共享库以包含在断点搜索中。
-r
选项的值为正则表达式;如果符号名称与该表达式匹配,它将被包含在断点中。 .
匹配所有内容。
lldb 教程:
http://lldb.llvm.org/tutorial.html
首先描述 lldb 命令的结构,您可能会觉得有用。
在lldb
中,我得到了help breakpoint set
:
-a <address-expression> ( --address <address-expression> )
Set the breakpoint at the specified address. If the address maps uniquely to a particular binary, then the address will be converted to a "file" address, so that the
breakpoint will track that binary+offset no matter where the binary eventually loads. Alternately, if you also specify the module - with the -s option - then the
address will be treated as a file address in that module, and resolved accordingly. Again, this will allow lldb to track that offset on subsequent reloads. The
module need not have been loaded at the time you specify this breakpoint, and will get resolved when the module is loaded.
和
-r <regular-expression> ( --func-regex <regular-expression> )
Set the breakpoint by function name, evaluating a regular-expression to find the function name(s).
和
-s <shlib-name> ( --shlib <shlib-name> )
Set the breakpoint only in this shared library. Can repeat this option multiple times to specify multiple shared libraries.
现在我想在指定 module/dylib 的每个函数处设置断点,您可以在命令 image list -f
.
以libobjc.A.dylib
和MyOwn.dylib
为例。我尝试了以下命令但失败了:
(lldb) breakpoint set -r libobjc.A.dylib
Breakpoint 1: no locations (pending).
WARNING: Unable to resolve breakpoint to any actual locations.
(lldb) b +[ThunderManager load]
Breakpoint 2: where = MyOwn.dylib`+[ThunderManager load] +16 at ThunderManager.m:20, address = 0x000000010489f274
(lldb) breakpoint set -r MyOwn.dylib`*
Breakpoint 3: no locations (pending).
WARNING: Unable to resolve breakpoint to any actual locations.
我希望 lldb
在模块 libobjc.A.dylib
或 MyOwn.dylib
或任何其他指定的已加载 module/shared 库的所有功能上中断。如何在lldb
?
(lldb) break set -r . -s libobjc.A.dylib
-s
选项取一个共享库作为它的值,它将断点限制在指定的共享库上。您可以多次指定 -s
选项以指定多个共享库以包含在断点搜索中。
-r
选项的值为正则表达式;如果符号名称与该表达式匹配,它将被包含在断点中。 .
匹配所有内容。
lldb 教程:
http://lldb.llvm.org/tutorial.html
首先描述 lldb 命令的结构,您可能会觉得有用。