2016-05-04 23 views
-1

Es gibt 3 Funktionen genannt: f1, f2, f3:wie ein Haltepunkt in einer Funktion setzen, wenn es durch eine bestimmte Funktion

void f1() 
{ 
    f3(); 
} 

void f2() 
{ 
    f3(); 
} 

void f3() 
{ 
    .... 
} 

Ich mag setze einen Haltepunkt irgendwo innerhalb f3, aber nur, wenn f3 wurde von f1 angerufen.

+0

Mögliche Duplikat [Gibt es eine Möglichkeit zu Setzen Sie einen Haltepunkt in gdb, der vom Call-Stack abhängig ist] (https://stackoverflow.com/questions/5336403/is-there-any-way-to-set-a-breakpoint-in-gdb-thatis- conditional-on-the-call-stac). –

+1

Auch verwandt: [GDB Pause bei Ausnahme ausgelöst, wenn von bestimmter Funktion aufgerufen] (http://stackoverflow.com/questions/26765176/gdb-break-on-exception-thrown-when-called-from-specific-function). Mit einer aktuellen Version von gdb können Sie 'b f3 tun, wenn $ _caller_is (" f1 ")' –

+0

Und die Dokumentation für obige Funktion (en) ist verfügbar unter https://sourceware.org/gdb/onlinedocs/gdb/Convenience- Funs.html. – dbrank0

Antwort

1

Eine Lösung unter anderem besteht darin, einen bedingten Breakpoint zu setzen. der Anruf von f3 durch int boolean identifiziert

Code:

#include <stdio.h> 

int boolean =0; 

void f3() 
{ 

} 

void f2() 
{ 
    boolean = 1; 
    f3(); 
} 

void f1() 
{ 
    boolean = 0; 
    f3(); 
} 


int main() 
{ 

    f2(); 
    f1(); 
    f2(); 
    f1(); 

    return 0; 
} 

In gdb eine Pause in f3 nur einstellen, wenn Sie von f2 kommen

(gdb)b f3 if boolean==1