Assuming Objective-C methods translate directly to user-space function calls, you should be able to use the DTrace pid provider:
The pid
Provider
The pid
provider enables you to trace any instruction in a
process. Unlike most other providers, pid
probes are created on
demand, based on the probe descriptions found in your D programs.
User Function Boundary Tracing
The simplest mode of operation for the pid
provider is as the user
space analogue to the fbt
provider. The following example program
traces all function entries and returns that are made from a single
function. The $1
macro variable expands to the first operand on the
command line. This macro variable is the process ID for the process to
trace. The $2
macro variable expands to the second operand on the
command line. This macro variable is the name of the function that all
function calls are traced from.
Example 4–3 userfunc.d
: Trace User Function Entry and Return
pid$1::$2:entry
{
self->trace = 1;
}
pid$1::$2:return
/self->trace/
{
self->trace = 0;
}
pid$1:::entry,
pid$1:::return
/self->trace/
{
}
This script produces output that is similar to the following example:
# ./userfunc.d 15032 execute
dtrace: script './userfunc.d' matched 11594 probes
0 -> execute
0 -> execute
0 -> Dfix
0 <- Dfix
0 -> s_strsave
0 -> malloc
0 <- malloc
0 <- s_strsave
0 -> set
0 -> malloc
0 <- malloc
0 <- set
0 -> set1
0 -> tglob
0 <- tglob
0 <- set1
0 -> setq
0 -> s_strcmp
0 <- s_strcmp
...