Добавить точки останова и установить обработчики

Моя цель высокого уровня примерно такая:

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 ответ

Я только что нашел одну библиотеку (я даже использовал ее несколько лет назад...): mach_override

Я также нашел этот debuglib, но не пытался.

Смотрите здесь для демонстрации __NSAutoreleaseNoPool: Автоматически выполняется print_backtrace,

Другие вопросы по тегам