Anzeige:
Ergebnis 1 bis 5 von 5

Thema: GDB file sccess

  1. #1
    Registrierter Benutzer
    Registriert seit
    03.02.2001
    Beiträge
    56

    GDB file sccess

    hallo,

    weiss jemand ob im mit dem GDB einen zugriff auf files überwachen kann ?

    ich habe ein programm, welches viele fopen() hat. Jedesmal wenn mit fopen() ein bestimmtes file in dem Dateisystem geoeffnet wird, dann möchte ich das programm anhalten (breakpoint).

    Weiss jemand wo ich das finde ?

    Vielen Dank
    Torsten

  2. #2
    Registrierter Benutzer
    Registriert seit
    29.02.2004
    Beiträge
    113
    Zitat Zitat von neo2k
    weiss jemand ob im mit dem GDB einen zugriff auf files überwachen kann ?
    Du plenkst, warum?

    ich habe ein programm, welches viele fopen() hat. Jedesmal wenn mit fopen() ein bestimmtes file in dem Dateisystem geoeffnet wird, dann möchte ich das programm anhalten (breakpoint).
    Dann tu das.

    Weiss jemand wo ich das finde ?
    Stelle konkrete Fragen. Dann klappts auch mit den Antworten.

    Gruß,
    /dev

  3. #3
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Er möchte wohl die Breakpoints nicht manuell setzen, oder?

    Man könnte natürlich eine Lib schreiben, die von LD vor dem richtigen FOPEN laden lassen und dann dort einen Breakpoint setzen...

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  4. #4
    Registrierter Benutzer
    Registriert seit
    03.02.2001
    Beiträge
    56
    Hi,

    ok, doof gefragt. Sorry.

    Also wie man breakpoints setzt weiss ich. Aber das geht nur auf bestimmte files und Zeilennummern. Was ich möchte ist einen Breakpoint sobald mein programm auf eine bestimmte Datei per fopen zugreift. Und das ohne das ich vorher weiss an welche stelle das in meinem Programm passieren kann.

    Viele Gruesse
    Torsten

  5. #5
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Dann kannst du einfach die fopen Funktion mit Hilfe von ld wrappen:
    Code:
    #include <stdio.h>
    
    // Nicht nötig, wenn mit int3 gearbeitet wird
    fopen_called_with_foobar()
    {
       /* nichts */
    }
    
    //Deklarieren, damit GCC glücklich ist
    FILE* __real_fopen(const char* path, const char* mode);
    
    FILE* __wrap_fopen(const char* path, const char* mode)
    {
       if (!strcmp(path,"FOOBAR"))
       {
           fopen_called_with_foobar();
          /* ALTERNATIV auf i386 Architektur */
          // __asm ("int3");
       }
       return __real_fopen(path,mode);
    }
    
    int main()
    {
       FILE* f;
       f = fopen("asdas","r");
       if (!f)
       {
           perror("fopen asdas");
       } else {
           fclose(f);
       }
       f = fopen("FOOBAR","r");
       if (!f)
       {
           perror("fopen FOOBAR");
       } else {
           fclose(f);
       }
    }
    Das kannst du dann mit
    Code:
    gcc -Wl,--wrap,fdopen -g [weitere Optionen] Datei.c
    compilieren.
    Wenn du mit int3 gearbeitet hast, wird gdb automatisch stoppen, ansonsten einfach einen breakpoint auf file_called_with_foobar setzen.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •