Как указать gcc, что нужно оснастить код вызовами моей собственной функции для каждой _line_ кода?

Например, есть источник:

void my_special_debugging_function(const char* function_name, const char* file_name, int line_number);

void func1() {
    func3();
    func4();
}

void foo() {
    func1();
    if(qqq) {
        func2();
    };
    func3();
    func4();
    for(...) {
        func5();
    }
}

Он должен компилироваться как:

void my_special_debugging_function(const char* function_name, const char* file_name, int line_number);

void func1() {
    my_special_debugging_function("func1", "prog.c", 3);
    func3();
    my_special_debugging_function("func1", "prog.c", 4);
    func4();
    my_special_debugging_function("func1", "prog.c", 5);
}

void foo() {
    my_special_debugging_function("foo", "prog.c", 8);
    func1();
    my_special_debugging_function("foo", "prog.c", 9);
    if(qqq) {
        my_special_debugging_function("foo", "prog.c", 10);
        func2();
        my_special_debugging_function("foo", "prog.c", 11);
    };
    my_special_debugging_function("foo", "prog.c", 12);
    func3();
    my_special_debugging_function("foo", "prog.c", 13);
    func4();
    my_special_debugging_function("foo", "prog.c", 14);
    for(...) {
        my_special_debugging_function("foo", "prog.c", 15);
        func5();
        my_special_debugging_function("foo", "prog.c", 16);
    }
    my_special_debugging_function("foo", "prog.c", 17);
}

Конечно, my_special_debugging_function должна иметь возможность использовать функцию backtrace .

Есть ли опция gcc для этого? Или есть инструмент для этого на уровне исходного кода? (например, сгенерировать другой источник C с помощью моей функции)

@related Как «чередовать» источник C / C ++ с моей строкой (только внутри функций в соответствующих местах)?

@related Какой профилировщик должен Я использую для измерения _реального_ времени (включая ожидание системных вызовов), затрачиваемого на эту функцию, а не _CPU_ one

5
задан Community 23 May 2017 в 12:32
поделиться