Есть код с функциями. Есть ли какой-либо способ узнать очередность выполнения этих функций? Т.е. я хочу увидеть что-то вроде такого:
main -> func1 star -> func2 start -> func2 end -> funс1 end -> func3 start -> func3 end
Можно конечно в начале и конце писать puts("star/end\n")
. Возможно есть что-то более удобное, или по каким словам это гуглить?
Я когда-то воспользовался (С++ only) классом типа
class CallInfo
{
public:
CallInfo(const char * name):name(name) { cout << name << " start\n"; }
~CallInfo() { cout << name << " end\n"; }
private:
const char * name;
};
#define Callinfo CallInfo ci__(__func__);
void test()
{
Callinfo
}
int main(int argc, const char * argv[])
{
Callinfo
test();
}
Я предполагаю, что список ВСЕХ вызовов Вам не нужен. А, на самом деле, Вам нужен стек вызовов функций в некоей точке, в которой (скорее всего) произошла ошибка и Вы пытаетесь понять, откуда пришло управление.
Для этой цели в с/с++ есть функция backtrace:
backtrace() returns a backtrace for the calling program, in the array pointed to by buffer. A backtrace is the series of currently active function calls for the program. Each item in the array pointed to by buffer is of type void *, and is the return address from the corresponding stack frame. The size argument specifies the maximum number of addresses that can be stored in buffer. If the backtrace is larger than size, then the addresses corresponding to the size most recent function calls are returned; to obtain the complete backtrace, make sure that buffer and size are large enough.
man 3 backtrace
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Создаю глобальную константную мапу и пытаюсь взят её элемент через опертаор [ ] в константную переменную, но компилятор говорит, что так нельзяКакие...