Crash sous solaris : bug du compilo ?

Crash sous solaris : bug du compilo ? - C++ - Programmation

Marsh Posté le 29-07-2005 à 15:39:14    

Hello j'ai un petit soucis avec mon programme :
 
il crash avec le message suivant dans le debuggueur :
 


t@1 (l@1) signal ILL (illegal opcode) in (unknown) at 0xfd159adc
0xfd159adc: __1cDstdZ__RTTI__1nDstdJbad_alloc__       :      unimp    0x24
Current function is bndBinder::connectTermToExpandedInst
(dbx) cont
t@1 (l@1) signal ILL (illegal opcode) in (unknown) at 0xfd159adc
0xfd159adc: __1cDstdZ__RTTI__1nDstdJbad_alloc__       :      unimp    0x24
Current function is bndBinder::connectTermToExpandedInst
(dbx) cont -sig 4  
t@1 (l@1) signal ILL (Illegal Instruction) in __sigprocmask at 0xfcf591f0
0xfcf591f0: __sigprocmask+0x0008:       retl  


 
la ligne qui cree l'erreur :
 

Code :
  1. bndOccTermImpl* occTermImpl= expandedOccInstTermImpl->occTermImpl();
  2. bndOccNetImpl* netImpl= occTermImpl->occNetImpl(); <== elle


 
occTermImpl est non nul et parfaitement valide.
il est reellement de type bndOccTermImpl*, et pas bndOccTermExpandedImpl*.
 
Les classes utilisees :
 

Code :
  1. class bndOccInstTermImpl : public bndOccObjectImpl {
  2. public:
  3.     virtual bndOccTermImpl*      occTermImpl() const;
  4. }
  5. class bndOccInstTermExpandedImpl : public bndOccInstTermImpl {
  6. public:
  7.     bndOccTermImpl*      occTermImpl() const;
  8. }
  9. class bndOccTermImpl : public bndOccObjectImpl {
  10. public:
  11.     virtual bndOccNetImpl*       occNetImpl() const;
  12. }
  13. class bndOccTermExpandedImpl : public bndOccTermImpl {
  14. public:
  15.     bndOccNetImpl*       occNetImpl() const;
  16. }


 
J'ai rate quelque chose :??:

Reply

Marsh Posté le 29-07-2005 à 15:39:14   

Reply

Marsh Posté le 29-07-2005 à 15:41:35    

Compilo utilise :
 
CC: Sun C++ 5.5 Patch 113817-06 2004/01/29

Reply

Marsh Posté le 29-07-2005 à 15:43:33    

Note additionnelle :
Quand j'essaie d'afficher occTermImpl->occNetImpl() avec workshop, il me sort :
 
dbx: error when looking for virtual function bndOccTermImpl::occNetImpl


Message édité par joce le 29-07-2005 à 15:43:51
Reply

Marsh Posté le 29-07-2005 à 16:24:05    

et tu executes sur une sparc ? parce que bon SIGILL ...

Reply

Marsh Posté le 29-07-2005 à 19:49:36    

Oui, illegal opcode...
p-ê une option de compilation qui n'est pas correcte, (compilé pour ultra, exécuté sur sparcstation, par ex.).

Reply

Marsh Posté le 29-07-2005 à 19:53:01    

elle est comment ta classe bndOccObjectImpl ?

Reply

Marsh Posté le 29-07-2005 à 19:58:51    

t'as essayé la technique bateau de rajouter des cout << typeid(*machin).name() ? parce qu'avec gcc-2.9x, y avait des merdes, des fois le type de l'objet était pas le bon :)

Reply

Marsh Posté le 29-07-2005 à 20:31:47    

++fab a écrit :

et tu executes sur une sparc ? parce que bon SIGILL ...


yep c'est du SPARC

Reply

Marsh Posté le 29-07-2005 à 20:32:53    

Taz a écrit :

elle est comment ta classe bndOccObjectImpl ?


pas de occTermImpl ou occNetImpl dedans

Reply

Marsh Posté le 29-07-2005 à 20:34:57    

Taz a écrit :

t'as essayé la technique bateau de rajouter des cout << typeid(*machin).name() ? parce qu'avec gcc-2.9x, y avait des merdes, des fois le type de l'objet était pas le bon :)


J'ai vérifier que mon objet occTermImpl était correct via son contenu, c'était bien un bndOccTermImpl et pas un bndOccTermExpandedImpl a priori, mais j'ai pas teste via typeid(*machin).name(), je jetterai un oeil si c'est pas résolu à mon retour de vacances dans 3 semaines :D

Reply

Marsh Posté le 29-07-2005 à 20:34:57   

Reply

Marsh Posté le 30-07-2005 à 08:24:33    

joce a écrit :

Note additionnelle :
Quand j'essaie d'afficher occTermImpl->occNetImpl() avec workshop, il me sort :
 
dbx: error when looking for virtual function bndOccTermImpl::occNetImpl


 
Ben c'est plutôt clair: il y a une couille dans votre steak qui fait que vous avez corrompu quelque part votre code. Ca peut autant venir d'un dépassement en écriture, d'un problème d'alignement, de pointeur invalide, ... Si votre programme est trop gros pour un simple examen à l'oeil, soit vous avez purify et il devrait vous trouver le problème comme un grand, soit il faut vous démerder pour reproduire le bug en amont et dichotomiser votre code jusqu'à trouver l'instruction coupable.

Reply

Marsh Posté le 30-07-2005 à 15:08:06    

je passerais un coup de purify pour voir yep

Reply

Marsh Posté le 30-07-2005 à 15:31:34    

t'as essayé avec g++ pour voir ?

Reply

Marsh Posté le 30-07-2005 à 16:07:07    

nop, j'ai pas eu l'occaz de faire un build linux pour voir, de toute façon le plus simple sera de passer un coup de purify pour avoir une idée

Reply

Marsh Posté le 30-07-2005 à 16:27:13    

sous solaris j'entends

Reply

Marsh Posté le 30-07-2005 à 21:03:21    

Je sais pas si gcc est installé sur les machines sous sparc / solaris

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed