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

C Discussion :

dump mémoire en C


Sujet :

C

  1. #1
    Membre régulier

    Inscrit en
    Décembre 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 49
    Points : 76
    Points
    76
    Par défaut dump mémoire en C
    Bonjour,

    existe t'il une instruction en C qui permettent de faire un print de la mémoire à un instant donné dans le programme

    je précise que je n'ai pas gdb et objdump à disposition.

    merci d'avance

    André

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Salut,

    En C, il n'y a rien de standard, mais je crois savoir (si je dis pas de bêtises) qu'il existe des API qui permettent de le faire.
    Tu tournes sous quel OS ?

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Dès que l'on a pas de gdb ou du objdump, on fait des printf ( si on a accès au code ).
    Sinon, je ne me rappelle plus ...
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Citation Envoyé par mumuri Voir le message
    existe t'il une instruction en C qui permettent de faire un print de la mémoire à un instant donné dans le programme
    Qu'est-ce que tu entends par « faire un print de la mémoire » ? Si c'est toute la mémoire, ça risque d'être extrêmement long et complètement inutile.

    Il y a moyen, sous Unix et Linux, de provoquer un core dump, mais cela ne sera utile qu'avec un débugueur. Sinon, tu peux essayer les fonctions de AltGr-Syst. Sous Linux, tu as également la possibilité d'explorer la mémoire entière à travers /proc/kcore et /dev/mem.

    Dis-nous plutôt directement ce que tu cherches à faire en réalité.

  5. #5
    Membre régulier

    Inscrit en
    Décembre 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 49
    Points : 76
    Points
    76
    Par défaut
    mon probléme c'est que j'ai un programme qui plante en me créant un fichier core à chaque deuxiéme fois que je fais un fgets ou un fputs
    http://www.developpez.net/forums/d90...hiers-sigchld/

    Comme le probléme semble venir de l'initialisation d'une variable, j'aimerai afficher un état de la mémoire au premier appel et au deuxième appel de ma fonction

    je tourne sous solaris 10 (notez que le programme fonctionne sans problème sur un autre serveur sous le m^me OS)

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Citation Envoyé par mumuri Voir le message
    mon probléme c'est que j'ai un programme qui plante en me créant un fichier core à chaque deuxiéme fois que je fais un fgets ou un fputs
    http://www.developpez.net/forums/d90...hiers-sigchld/

    Comme le probléme semble venir de l'initialisation d'une variable, j'aimerai afficher un état de la mémoire au premier appel et au deuxième appel de ma fonction

    je tourne sous solaris 10 (notez que le programme fonctionne sans problème sur un autre serveur sous le m^me OS)
    Et bien, c'est du déboguage élémentaire. Le fichier « core » est lui-même un dump de la mémoire de ton processus, et de son état au moment du crash. Sous Solaris, le debugger s'apelle dbx. Tu peux aussi utiliser gdb si ton système le propose.

    Lance le débugger avec « dbx nomdetonexecutable nomdufichiercore » et tape « help », puis « where ».

    Tu pourras placer des breakpoints aux bons endroits et demander l'affichage du contenu des variables en temps réel. Voici une liste de commandes.

    Bon courage.

  7. #7
    Membre régulier

    Inscrit en
    Décembre 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 49
    Points : 76
    Points
    76
    Par défaut
    merci pour la réponse

    en faisant le where, j'obtiens le résultat suivant, ce que j'aimerai c'est remplacer la lib qui ne marche pas sur mon premier serveur par la lib qui marche sur mon deuxieme serveur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [1] srch_dir(0x2008, 0x898e8, 0x898e8, 0x898e8, 0x0, 0x0), at 0xff1d5cb4
      [2] ispts(0x2008, 0x1, 0x98904, 0x0, 0xff26e32c, 0xff2776f0), at 0xff1d5a6c
      [3] 0xff2265ac(0x413f0, 0x6, 0x40, 0xffffffff, 0x4, 0x2000), at 0xff2265ab
      [4] _rmutex_lock(0x2cc60, 0xffbfed7c, 0xff26e32c, 0x0, 0x40, 0x40), at 0xff219550
      [5] mknod(0x413f0, 0x2cc60, 0xffbfee9c, 0x513b8, 0x2035c, 0xff26e32c), at 0xff21d040
      [6] _log(0xffbff72c, 0xffbff70c, 0x4e9a8, 0x5e9b0, 0xff3a0200, 0x413f0), at 0x1d05c
      [7] Processus_serveur(0x5, 0x413c0, 0x0, 0x0, 0x4f1a8, 0x9), at 0x1872c
      [8] demare(0x0, 0x1, 0x0, 0x0, 0x5, 0x4), at 0x1793c
      [9] main(0x4, 0xffbff92c, 0x0, 0x0, 0x1, 0x0), at 0x17274
    dans les 2 cas, (fgets ou fputs) , c'est le srch_dir qui plante

    un module me donne le nom du .o considéré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     module
    No Info   ttyname.o
    un loadobject me donne le nom d'un .so, je ne sais pas si c'est le bon, mais ce .so est identique sur les 2 machines
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    loadobject
    /lib/libc.so.1
    comment trouver d'où vient le problème, sachant que j'ai une machine fonctionnelle avec le même programme.

    l'erreur est signal SEGV (no mapping at the fault address)

Discussions similaires

  1. Analyse d'un dump mémoire Linux depuis un os Windows
    Par jhfra dans le forum Administration système
    Réponses: 5
    Dernier message: 21/03/2014, 16h44
  2. quid : dump mémoire ~ activité
    Par chapeau_melon dans le forum WinDev
    Réponses: 0
    Dernier message: 09/02/2012, 17h12
  3. [JNI]Fuite mémoire/ core dumped JVM
    Par kinder29 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 02/09/2008, 16h31
  4. Gestion de mémoire (core dumped si vite ?)
    Par _SamSoft_ dans le forum C
    Réponses: 8
    Dernier message: 09/02/2008, 19h13

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