Добавить точки останова и установить обработчики
Моя цель высокого уровня примерно такая:
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
,