IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

GDB et Shared Library


Sujet :

Linux

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Points : 4
    Points
    4
    Par défaut GDB et Shared Library
    Salut

    Je tests un prog avec GDB. Celui-ci charge plusieurs fichiers .so. Le prog principale ainsi que les .so sont compiles en mode debug. Certain .so sont charges dynamiquement.

    Mes questions sont les suivantes :
    1 - Comment est t il possible sous GDB de mettre un break point sur un .so qui n'est pas encore charge en memoire lors du demarrage du prog (chargement dynamique fait par le prog) ?

    2 - Existe t il une commande sous GDB permettant de charger un .so manuellement dans l'espace du process ?

    Merci de votre aide

  2. #2
    Membre éprouvé Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Points : 1 210
    Points
    1 210
    Par défaut
    Citation Envoyé par TheTof
    Salut

    Je tests un prog avec GDB. Celui-ci charge plusieurs fichiers .so. Le prog principale ainsi que les .so sont compiles en mode debug. Certain .so sont charges dynamiquement.

    Mes questions sont les suivantes :
    1 - Comment est t il possible sous GDB de mettre un break point sur un .so qui n'est pas encore charge en memoire lors du demarrage du prog (chargement dynamique fait par le prog) ?

    2 - Existe t il une commande sous GDB permettant de charger un .so manuellement dans l'espace du process ?

    Merci de votre aide
    Salut et bienvenue,
    c'est assez marrant ta question, C'est un peu comme si tu demandais de mettre des breakpoints sans lancer l'executable. Un breakpoint est un breakpoint que si gdb est en train de faire tourner le programme en effet il est difficile de débugguer quelque chose qui ne trourne pas.

    Donc la réponse tu dois t'en douter est que c'est impossible.

    A ma connaissance, il n'existe pas de commande GDB pour charger une bibliothèque dynamique mais tu peux créer un programme de test et débugguer celui-ci et la bibliothèque de ce fait.

    Pour vérifier,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="http://man.developpez.com/man1/gdb.1.php" target="_blank">man</a> <a href="http://man.developpez.com/man1/gdb.1.php" target="_blank">gdb</a>

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par gnto
    Salut et bienvenue,
    c'est assez marrant ta question, C'est un peu comme si tu demandais de mettre des breakpoints sans lancer l'executable. Un breakpoint est un breakpoint que si gdb est en train de faire tourner le programme en effet il est difficile de débugguer quelque chose qui ne trourne pas.

    Donc la réponse tu dois t'en douter est que c'est impossible.
    J'ai trouve le moyen de contourner le pb :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    set breakpoint pending on
    break toto.c:200
    run
    Meme si le prog n'est pas lance le break point est accepte et est mis en PENDING. Ensuite quand on fait un "run" des que la Shared Library est chargee le break point devient actif et GDB s'arret a l'endroit indique.

    Je ne peux certe pas forcer le chargement de la Shared Library mais il m'est possible de mettre un break point alors qu'elle n'est pas charge. En definitif c'est le break point qui m'interesse le plus. De cette maniere ca resoud mon pb.

    A+

  4. #4
    Membre éprouvé Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Points : 1 210
    Points
    1 210
    Par défaut
    Ok, j'avais cru autre chose !!

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut break sur strcpy ne fonctionne pas
    bonjour
    je debute avec gdb et je ne trouve pas de doc maidant.
    je veux juste faire un break sur la fonction strcpy
    gdb previent que la lib n'est pas encore chargée et qu'il trouvera le break au chargement du programme:

    gekos@gekos-desktop:~/Bureau$ gdb ./a
    GNU gdb 6.8-debian
    Copyright (C) 2008 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law. Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "i486-linux-gnu"...
    ./a: No such file or directory.
    (gdb) q
    gekos@gekos-desktop:~/Bureau$ gdb -q a.out
    (gdb) list
    1 #include <stdio.h>
    2 #include <string.h>
    3
    4 int main(){
    5 char str_a[20];
    6
    7 strcpy(str_a, "Hello, world!\n");
    8 printf(str_a);
    9 }
    10
    (gdb) break strcpy
    Function "strcpy" not defined.
    Make breakpoint pending on future shared library load? (y or [n]) y

    Breakpoint 1 (strcpy) pending.
    (gdb) show breakpoint
    auto-hw pending
    (gdb) show breakpoint pending
    Debugger's behavior regarding pending breakpoints is auto.
    (gdb) run
    Starting program: /home/gekos/Bureau/a.out
    Hello, world!

    Program exited with code 016.
    (gdb)

    mais aucun break ne se produit
    jai fouillé des docs et forums mais a part utiliser les commandes changant breakpoints en auto et on , je n'ai rien trouve
    en on ou auto , aucun break

    si quelquin a une direction a me conseiller pr que je comprenne, merci d'avance.

    Gekos

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. shared library heritage
    Par suckthewindow dans le forum C++
    Réponses: 4
    Dernier message: 12/04/2007, 18h33
  2. Réponses: 9
    Dernier message: 08/03/2007, 14h26
  3. [installation 9i] error while loading shared library
    Par ChristopheH dans le forum Installation
    Réponses: 3
    Dernier message: 19/07/2006, 17h36
  4. GDB : Error while mapping shared library sections
    Par FrigoAcide dans le forum GDB
    Réponses: 1
    Dernier message: 09/05/2006, 11h06
  5. Réponses: 2
    Dernier message: 05/02/2004, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo