Archiv verlassen und diese Seite im Standarddesign anzeigen : 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
weiss jemand ob im mit dem GDB einen zugriff auf files überwachen kann ?Du plenkst (http://www.sockenseite.de/usenet/plenken.html), 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
peschmae
09-06-2005, 07:19
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ä
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
Dann kannst du einfach die fopen Funktion mit Hilfe von ld wrappen:
#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
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.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.