Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

debutant: abandon(core dumped)

607 views
Skip to first unread message

Yves Kuhry

unread,
Apr 9, 2001, 8:46:20 AM4/9/01
to
Bonjour,

je suis actuellement en train de travailler sur un programme qui, entre
autres, calcule les solutions d'une équation à partir d'un balayage (deux
boucles imbriquées) sur des conditions initiales. Pb: en plein milieu de la
boucle, le programme s'arrete et le message

Abandon(core dumped)

s'affiche. gdb ne m'est pas d'un tres grand secours puisque je ne sais pas a
quelle iteration l'erreur se produit (ca change d'une execution a l'autre)
et que l'erreur a lieu dans une fonction (memalign(), kill(), ou free()
selon les executions) appelee par une bibliotheque dont je n'ai pas acces au
code source. Bref, je sais que c'est flou tout ca, mais le probleme est
justement que je n'arrive pas a localiser l'origine du plantage.
Toute information susceptible de m'aider a trouver cette *@#&% !! d'erreur
(logiciels de debuggage, ...) m'interesse
Precision: le prg a ete compile avec -lefence et ca ne m'aide pas des
masses.

merci d'avance

Y.K.


pascal bontoux

unread,
Apr 9, 2001, 9:57:22 AM4/9/01
to
Yves Kuhry wrote:

Pour que l'on puisse t'aider, donne nous ton source.

Pascal

Yves Kuhry

unread,
Apr 9, 2001, 10:22:02 AM4/9/01
to
J'ai mis le source en libre disposition à l'adresse

http://cournot.u-strasbg.fr/~kuhry/

Le fichier qui pose probleme est vraisemblablement steady.c (dans
manifold/src/). Le plantage a lieu lorsqu'on selectionne compute dans le
menu steady-states.
Les deux boucles imbriquées se trouvent dans la fonction steady_update().
C'est mon premier programme en C, alors je vous demande un peu d'indulgence.
Ceci etant, je ne tiens pas forcement a ce que quelqu'un se tape le boulot a
ma place, mais j'aimerais
quelques conseils pour rechercher plus efficacement les erreurs d'allocation
memoire

Y.K.

pascal bontoux <pascal....@ec-lyon.fr> a écrit dans le message :
3AD1BFC2...@ec-lyon.fr...

Michael Demanet

unread,
Apr 9, 2001, 10:23:40 AM4/9/01
to

Yves Kuhry wrote:

> J'ai mis le source en libre disposition à l'adresse
>
> http://cournot.u-strasbg.fr/~kuhry/
>
> Le fichier qui pose probleme est vraisemblablement steady.c (dans
> manifold/src/). Le plantage a lieu lorsqu'on selectionne compute dans le
> menu steady-states.
> Les deux boucles imbriquées se trouvent dans la fonction steady_update().
> C'est mon premier programme en C, alors je vous demande un peu d'indulgence.
> Ceci etant, je ne tiens pas forcement a ce que quelqu'un se tape le boulot a
> ma place, mais j'aimerais
> quelques conseils pour rechercher plus efficacement les erreurs d'allocation
> memoire
>
> Y.K.
>
>

Heu, c'est normal si je n'arrive pas a avoir acces a dynamics-src.tgz ? le
lien semble hs.
Michael

Yves Kuhry

unread,
Apr 9, 2001, 11:11:01 AM4/9/01
to
Ben, non, c'est pas normal, ca devrait marcher.


Michael Demanet

unread,
Apr 9, 2001, 11:11:25 AM4/9/01
to

Yves Kuhry wrote:

> Ben, non, c'est pas normal, ca devrait marcher.

Pourtant, j'ai un superbe not found.

Yves Kuhry

unread,
Apr 9, 2001, 12:02:23 PM4/9/01
to
et maintenant ?

Michael Demanet <m...@info.fundp.ac.be> a écrit dans le message :
3AD1D11D...@info.fundp.ac.be...

Alexandre Gouraud

unread,
Apr 9, 2001, 3:05:48 PM4/9/01
to
Avec ton debugger, tu devrais pouvoir directement trouver l'instruction qui
buggue.
Tu lance pas a pas, sans entrer dans le corps des fonctions. Quand tu
reperes la fonction qui plante, tu refais la meme chose, et quand tu arrives
a la fonction qui plante, la tu entres dedans. et ainsi de suite.
Et normalement tu decouvres rapidement l'instruction qui plante.
Mais c'est sur qu'en lancant ton debugger sans beak points, tu ne peux pas
trouver l'erreur.
Il faut y aller pas a pas.

Bonne chance.

PS: ton programme est bien single-threaded ?


Yves Kuhry

unread,
Apr 10, 2001, 4:46:56 AM4/10/01
to

Alexandre Gouraud <alexandre.gouraud#@enst-bretagne.fr> a écrit dans le
message : 9at16d$p6j$1...@bmerhc5e.ca.nortel.com...

> Avec ton debugger, tu devrais pouvoir directement trouver l'instruction
qui
> buggue.
> Tu lance pas a pas, sans entrer dans le corps des fonctions. Quand tu
> reperes la fonction qui plante, tu refais la meme chose, et quand tu
arrives
> a la fonction qui plante, la tu entres dedans. et ainsi de suite.
> Et normalement tu decouvres rapidement l'instruction qui plante.
> Mais c'est sur qu'en lancant ton debugger sans beak points, tu ne peux pas
> trouver l'erreur.
> Il faut y aller pas a pas.

Je suis bien d'accord mais le probleme c'est que ca plante dans une boucle.
L'instruction marche n fois et plante la n+unieme. Si j'y vais pas a pas,
j'y serai encore dans 3 semaines. Pareil pour les watchpoints, si je savais
que ca plante pour i=54, j=87, il n'y aurait pas de pb. Le hic, c'est que
les erreurs d'allocations n'entrainent pas un plantage systematique.
>

> Bonne chance.

merci


>
> PS: ton programme est bien single-threaded ?

heu, ca veut dire quoi ca ?
>
>
>
>


Serge Danzanvilliers

unread,
Apr 10, 2001, 5:44:03 AM4/10/01
to
"Yves Kuhry" <ku...@cournot.u-srasbg.fr> a écrit (msg:
<9auliu$i2p$1...@news.u-strasbg.fr>):

Tu n'as qu'à ajouter des traces dans ton code.
Et si tu tiens vraiment à y aller avec un debugger, tu le lances avec le
fichier core en paramètre, il va se positionner directement sur
l'instruction du plantage et tu pourras voir l'état du programme à ce
moment-là, remonter dans la pile des appels etc...

--
Serge Danzanvilliers

Yves Kuhry

unread,
Apr 10, 2001, 6:21:14 AM4/10/01
to
Merci en tout cas pour vos reponses.

J'ai bien fait un gdb sur le core mais ca ne m'avance pas plus. Selon les
cas, l'erreur a lieu dans free() ou kill(), mais quand je tape list, ca
m'affiche

1. init.c aucun fichier ou répertoire de ce type

et backtrace

#0 0x8060d54 in free ()
#1 0x400d4168 in ?? () from /usr/local/lib/liballeg-3.9.33.so

ce qui ne m'aide pas franchement.

Serge Danzanvilliers <mo...@club-internet.fr> a écrit dans le message :
9aukl2$21kd$1...@norfair.nerim.net...

Erwann ABALEA

unread,
Apr 10, 2001, 8:50:21 AM4/10/01
to
On Tue, 10 Apr 2001, Yves Kuhry wrote:

> Merci en tout cas pour vos reponses.
>
> J'ai bien fait un gdb sur le core mais ca ne m'avance pas plus. Selon les
> cas, l'erreur a lieu dans free() ou kill(), mais quand je tape list, ca
> m'affiche
>
> 1. init.c aucun fichier ou répertoire de ce type
>
> et backtrace
>
> #0 0x8060d54 in free ()
> #1 0x400d4168 in ?? () from /usr/local/lib/liballeg-3.9.33.so

C'est donc la librairie Allegro qui fait un appel à free() alors qu'elle
ne devrait pas.

> ce qui ne m'aide pas franchement.

Essaye de trouver une librairie Allegro compilée avec les symboles de
debug, tu pourras remplacer le '??' de ton backtrace plus haut.

--
Erwann ABALEA
erw...@abalea.com
- RSA PGP Key ID: 0x2D0EABD5 -

Alexandre Gouraud

unread,
Apr 10, 2001, 9:52:01 AM4/10/01
to
Pour verifier que tu fais bien autant de free que d'allocation memoire, tu
peux creer deux variables, une pour free, une pour malloc, que tu
incrementes a chaque allocation, et a chaque liberation de la memoire.
Et tu verifies si ces variables evoluent correctement.

Je serais toi, je ferais quelques tours dans la boucle pas a pas pour
verifier que TOUTES tes variables s'incrementent correctement aussi.

Initialise toutes tes variables a zero. Ca peut permettre d'avoir un
comportement moins aleatoire quand ca plante, et c'est bon pour ton corps.

A mon avis ton programme est bien single-threaded, c'est a dire en gros
qu'il n'y a qu'un programme qui s'execute en meme temps. Tu n'as pas deux
programmes qui s'executent en parallele, et qui vont lire et ecrire les
donnees sur la meme zone memoire.

D'une maniere generale, (je sais que j'enfonce des portes ouvertes), va voir
les parties de ton code ou tu fais des ecritures en memoires un peu au pif
(genre si t'alloues des espaces memoires de taille bizarre, que t'oublie la
taille de la zone, etc...)

re bonne chance.

0 new messages