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é
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é
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 ?
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 ...
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é.
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.
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
dans les 2 cas, (fgets ou fputs) , c'est le srch_dir qui plante
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
un module me donne le nom du .o considéré
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
2module No Info ttyname.o
comment trouver d'où vient le problème, sachant que j'ai une machine fonctionnelle avec le même programme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2loadobject /lib/libc.so.1
l'erreur est signal SEGV (no mapping at the fault address)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager