Есть ли способ сбросить стек вызовов в запущенном процессе на C или С++ каждый раз, когда вызывается определенная функция? Что я имею в виду, это примерно так:
void foo()
{
print_stack_trace();
// foo body
return
}
Где print_stack_trace
работает аналогично caller
в Perl.
Или что-то вроде этого:
int main (void)
{
// will print out debug info every time foo() is called
register_stack_trace_function(foo);
// etc...
}
где register_stack_trace_function
помещает какую-то внутреннюю точку останова, которая вызовет печать трассировки стека всякий раз, когда вызывается foo
.
Есть ли что-нибудь подобное в некоторой стандартной библиотеке C?
Я работаю над Linux, используя GCC.
Фон
У меня есть тестовый прогон, который ведет себя по-разному на основе некоторых ключей командной строки, которые не должны влиять на это поведение. Мой код имеет генератор псевдослучайных чисел, который, как я полагаю, вызывается по-разному на основе этих переключателей. Я хочу иметь возможность запускать тест с каждым набором переключателей и посмотреть, будет ли генератор случайных чисел вызываться по-разному для каждого из них.