添加断点并安装处理程序

时间:2014-02-18 07:56:07

标签: macos breakpoints ptrace

我的高级目标是这样的:

void print_backtrace() {
    void *callstack[128];
    int framesC = backtrace(callstack, sizeof(callstack));
    printf("backtrace() returned %d addresses\n", framesC);
    char** strs = backtrace_symbols(callstack, framesC);
    for(int i = 0; i < framesC; ++i) {
        if(strs[i])
            printf("%s\n", strs[i]);
        else
            break;
    }
    free(strs);
}

install_breakpoint_handler("__NSAutoreleaseNoPool", print_backtrace);

因此,每次捕获__NSAutoreleaseNoPool函数断点时,都应调用print_backtrace。 (都在同一个二进制文件中。我不是要抓住单独进程的断点。)

我想我可以通过ptrace以某种方式做到这一点。是否有一些易于使用且轻量级的库?

目前我正在寻找MacOSX解决方案,但跨平台当然会很好。

1 个答案:

答案 0 :(得分:0)

我刚发现一个lib(几年前我甚至用过它......):mach_override

我还发现了this debuglib,但没有尝试过。

有关__NSAutoreleaseNoPool的演示,请参见here:它会自动执行print_backtrace