печать стека вызовов на C или C ++

Есть ли способ сбрасывать стек вызовов в запущенном процессе на C или C ++ каждый раз, когда вызывается определенная функция? Я имею в виду примерно следующее:

void foo()
{
   print_stack_trace();

   // foo's body

   return
}

Где print_stack_trace работает аналогично вызывающему в 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.


Предпосылки

У меня есть тестовый запуск, который ведет себя по-разному в зависимости от некоторых переключателей командной строки, которые не должны влиять на это поведение. В моем коде есть генератор псевдослучайных чисел, который, как я полагаю, вызывается по-разному в зависимости от этих переключателей. Я хочу иметь возможность запускать тест с каждым набором переключателей и видеть, вызывается ли генератор случайных чисел по-разному для каждого из них.

98
задан Lazer 10 October 2010 в 14:38
поделиться