Pages vues depuis 25/07/2007 : 25 337 888
Index du forum »» Création-Développement »» Un truc pour debugger du C
Là je cherche une bug et vous fais profiter d'un de mes trucs en C
Souvent on voudrais savoir à quelle ligne ça plante..
Alors j'ai une macro comme ça
ULONG asmline=0;
#define LL { asmline= __LINE__ ; printf("Line:%ld\n",asmline); }
__LINE__ est le numéro de ligne du listing
Ca l'imprime pour voir où en est le programme
Mais cette impression dans la console est parfois trop lente, bufferisée comme une imprimante, et la dernière ligne "Ligne:1500" alors que le crash a eu lieu ligne 1510 par exemple
Aussi je copie aussi ce numéro de ligne en memoire dans la variable asmline
Quand le crash a lieu allez voir le "desassemblage" et vous verrez certainement un " li 1510" cad le "load immediate" du numero de ligne en asm ppc
Utilisation juste ajouter LL en debut de ligne (mais faites gaffe aux "if")
/* first do culling */
LL tri->P=P;
LL V =O->V2.X;
LL i=tri->VI[0];
LL P[0].x=V[i].x;
LL P[0].y=V[i].y;
LL P[0].z=V[i].z;
LL i=tri->VI[1];
LL P[1].x=V[i].x;
LL P[1].y=V[i].y;
LL P[1].z=V[i].z;
LL i=tri->VI[2];
LL P[2].x=V[i].x;
LL P[2].y=V[i].y;
LL P[2].z=V[i].z;
LL
LL FaceCCW= ((P[1].x - P[0].x)*(P[2].y - P[0].y)-(P[2].x - P[0].x)*(P[1].y - P[0].y) < 0.0); /* formula from TinyGL */
LL if(MAT->state.CullingMode==W3D_CW)
FaceCCW=!FaceCCW;
LL if(MAT->state.CullingMode==W3D_NOW)
FaceCCW=TRUE;
et un simple "addr2line" en compilant avec gstabs, ça ne te suffit pas ?
http://forum.hyperion-entertainment.biz/viewtopic.php?f=26&t=344#p4459