Wie kann ich gcc anweisen, den Code mit Aufrufen meiner eigenen Funktion für jede _Zeile_ Code zu instrumentieren?

Zum Beispiel gibt es die Quelle:

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();
    }
}

Es sollte kompiliert werden als:

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);
}

Natürlich sollte my_special_debugging_function in der Lage sein,backtrace Funktion.

Gibt es eine Option von gcc, um das zu tun? Oder gibt es ein Tool, um dies auf Quellcode-Ebene zu tun? (z. B. andere C-Quelle mit meiner Funktion erzeugen)

@verbunde Wie kann ich C / C ++ - Quellcode mit meinem String "verschachteln" (nur innerhalb von Funktionen an geeigneten Stellen)?

@verbunde Welchen Profiler sollte ich verwenden, um die Echtzeit (einschließlich des Wartens auf Systemaufrufe) für diese Funktion zu messen, nicht für _CPU_ one

Antworten auf die Frage(8)

Ihre Antwort auf die Frage