See site in english Voir le site en francais
Website skin:
home  download  forum  link  contact

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

Author Topic: [C++] Debuggage  (Read 16409 times)

0 Members and 1 Guest are viewing this topic.

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
03 September 2007, 14:47:46
J'ai un gros problème de debuggage ...

En fait, je ne peux rien faire :sad:
Quand je lance par F5 à partir de MSVC, ça bloque ici ...
Alors qu'Orbiter est encore sur le splash screen.
Evidamment, j'ai vérifié que le mesh et les textures sont bien là.
Le même scenario lancé depuis Orbiter directement fonctionne
avec la même DLL sans rien changer dans l'arborescence d'Orbiter.

Bref, c'est la zone quoi :sad:




Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #1 - 03 September 2007, 15:04:26
pointeur non valide, typique... t'inquiete a partir de la ca va etre facile.

Je ne vois pas le reste de l'image ni le code...

Il s'arrette a l'endroit exact ou n'importe ou ?

Tu peux poster le code que je copie/colle ?

Dan


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #2 - 03 September 2007, 15:06:43
EDIT:

T'a probablement oublié de mettre le path dans le debugger, il lance orbiter.exe
mais avec un repertoire probablement mis sur C:\

'ffectivement il doit pas trouver grand chose la :)

Sous "repertoire de travail":



pourtant y a un tuto :sad:

Dan



Message modifié ( 03-09-2007 15:07 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #3 - 03 September 2007, 15:15:19
Non, mon projet en active debug est bien configuré sur D:\10_ORBITER_DEV\orbiter.exe

Le répertoire de travail est le bon aussi !
Et quand je lance par F5, j'ai bien Orbiter qui se lance.
Je choisis un scenario. Le Splash screen Orbiter apparait et ça bloque sur la ligne

   SetMeshVisibilityMode (AddMesh (exmesh_tpl = oapiLoadMeshGlobal ("Irridium\\Irridium")),
MESHVIS_EXTERNAL);

Puis je quitte le debuggage .... et je lance Orbiter directement sur le même scenario avec la même
DLL ( créée en debug elle fait 8 MO, j'ai vérifié la date et l'heure de création pour être sûr que c'est la même )
Et ça fonctionne, le mesh loade bien ainsi que les textures ... bon ... par contre ça crashe plus loin mais c'est un autre problème :badsmile:



Message modifié ( 03-09-2007 15:18 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #4 - 03 September 2007, 15:23:25
t'a une photo du meme panel que l'image plus haut SVP ? :doubt:

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #5 - 03 September 2007, 15:32:14



Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #6 - 03 September 2007, 15:39:32
excuse moi davoir douté, vaut mieux etre sur... :) (j'ai toujours une vague impression que c'est lié mais bon ??)

bon, probablement que le handle exmesh_tpl retourné par oapiLoadMeshGlobal  est invalide

Code: [Select]
SetMeshVisibilityMode (AddMesh (exmesh_tpl = oapiLoadMeshGlobal ("Irridium\\Irridium")),
Essaie de décomposer met un point d'arret sur le if, a mon avis le handle est a zero:

Code: [Select]
exmesh_tpl = oapiLoadMeshGlobal ("Irridium\\Irridium");
if(exmesh_tpl)
{
    SetMeshVisibilityMode (AddMesh(exmesh_tpl),MESHVIS_EXTERNAL);
}

En passant je donnerais vraiment un no de slot a InsertMesh plutot que addmesh ou tu n'a pas le control du slot:

SetMeshVisibilityMode(InsertMesh(MeshDGIII=oapiLoadMeshGlobal ("DGIV\\DeltaGliderIV"),2
),MESHVIS_EXTERNAL);

A++

Dan



Message modifié ( 03-09-2007 15:44 )


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #7 - 03 September 2007, 15:43:51
En passant tu créer bien ta dll dans D:\10_Orbiter_dev/modules/ ? (output)
Et quand tu lance en manuel c'est bien dans ce répertoire ?

Dan



Message modifié ( 03-09-2007 15:44 )


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #8 - 03 September 2007, 15:46:04
sinon j'ai une idée... mais j'attend ta réponse avant...

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #9 - 03 September 2007, 15:56:54

Quand je lance en manuel oui c'est le même répertoire.
Par contre j'ai un gros doute encore.
Je viens de régénérer la solution et la date de création de la DLL n'a pas changé !
J'ai jamais retouché aux settings MSVC pourtant ... trop content que ça fonctionne !

Avec le point d'arrêt ici ... ça a bloqué de la même façon
exmesh_tpl = oapiLoadMeshGlobal ("Irridium\\Irridium");


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #10 - 03 September 2007, 16:02:24
delete la dll irridium de orbiter/modules et recompile, si elle revient pas... soucis de setting

Si tu met un point d'arret et tu fait F10 pour avancer d'une ligne il plante SUR la ligne:
exmesh_tpl = oapiLoadMeshGlobal ("Irridium\\Irridium");

Plus d'infos quoi, mais on va y arriver no soucis...

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #11 - 03 September 2007, 16:05:26
Elle est réapparue avec la bonne date et la bonne heure à partir de générer en mode debuggage par F5.
Donc bons settings ...

Oui pour le point d'arret ... mais je ne peux jamais reprendre la main ...



Message modifié ( 03-09-2007 18:12 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #12 - 03 September 2007, 16:07:06
tu lance en full screen ? comment ca pas reprendre la mains ?
Si il plante avant le F9 (point rouge) ou après quand tu fait F10 ? ye comprend pas... !!??

C'est la ou un "bureau a distance" serais utile :sick:

Dan



Message modifié ( 03-09-2007 16:07 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #13 - 03 September 2007, 16:17:39
Bon, je viens de faire un test en trois étapes.

Etape 1
J'ai commenté les lignes concernées ...
( pas de load mesh quoi )
F5 depuis MSVC ... Orbiter s'est bien lancé jusqu'au bout ( sans mesh visible evidoeutly  )
Tout marche bien sur Orbiter et sur MSVC sauf que le vaisseau est invisible oeuf corse, je peux reprendre la main à
volonté entre Orbiter et MSVC mettre des points d'arret ou je veux etc etc ...

Etape 2
Puis je sors du mode active debug ... je recréé la DLL en décommentant les lignes load mesh ...
Je lance le même scenar sur le meme Orbiter avec la nouvelle DLL ... pas de soucis ... le mesh est là ...
Tout fonctionne bien ...

Etape 3
Je retourne sur MSVC je fait un F5 avec régénération de la DLL oeuf corse too...
et rebelote ...
plantage MSVC sur le load mesh !!! :wall: :wall:
Exception non gérée à 0x004808e8 dans orbiter.exe : 0xC0000005: Violation d'accès lors de l'écriture à
l'emplacement 0x00000000.
sur oapiLoadmesh



Message modifié ( 03-09-2007 16:25 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #14 - 03 September 2007, 16:49:45
1-T'a deux irridiums dans ce scenario ?
2-le handle est bien une variable de classe ?
3-Il plante bien au moment ou tu fais F10 sur la fonction oapiLoadMeshGloab ?

Si tu est completement en panne envoie moi tout le projet en mail, j'essaierais
sur le petit ordi qui a VC express...

Dan



Message modifié ( 03-09-2007 16:50 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #15 - 03 September 2007, 17:29:35
Non, pas forcément avec deux Irridium ...
Je teste sur n'importe quel scenario et tous me renvoient la même chose.
Alors que tous les scenarios fonctionnent par un lancement d'Orbiter directement.

Le HANDLE est de la forme MESHHANDLE Irridium::exmesh_tpl
Le seul risque que j'ai pris est peut être d'avoir déclaré en même temps le mesh pour le VC
sur la même ligne mais ça fonctionne sur Orbiter et en release ...
   MESHHANDLE vcmesh_tpl,exmesh_tpl;

Pour F10 ou F9 ... pas le temps ... je ne reprend JAMAIS la main sur MSVC à partir de F5
C'est directement le crash ...avec la fenêtre exception.
La seule manière de reprendre la main est de stopper définitivement le debuggage.


Bref, la grosse ... grosse panne avec MSVC

J'ai uploadé le projet complet avec cpps, headers, ressources bitmaps, grosse DLL ( en debug ),
scenarios, meshes, textures, configs et tout le bastringue sur Upload dans le dossier IRRIDIUM ... c'est un Zip
8 MO .... :sick: Normalement, l'arborescence est clean, vérifie quand même un peu avant de dézipper ;)

Tu vas voir que ça va pas compiler :sad:



Message modifié ( 03-09-2007 18:09 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #16 - 03 September 2007, 18:52:46
Quote
picto a écrit:
Pour F10 ou F9 ... pas le temps ... je ne reprend JAMAIS la main sur MSVC à partir de F5
C'est directement le crash ...avec la fenêtre exception.

Donc le crash est AVANT cette ligne, c'est consistant je verrais bien les init tableaux et autre
qui doivent etre avant foutre le c... (c'est des choses sujette au erreurs)
Un pointeur invalide ne fait pas forcement d'erreur sur le moment, c'est quand on essaie
d'y acceder ou acceder a la mémoire qui à été ecrasée.

Essaie de mettre des point d'arret depuis le debut de clbkSetClassCap...
après tu F10 jusqu'a trouver la ligne qui "produit" le crash...

J'attend ton test avant de m'y mettre...

Dan



Message modifié ( 03-09-2007 18:53 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #17 - 03 September 2007, 19:17:51
Deux tests ...


Premier test
J'ai mis le point d'arret au tout début de classcap.
Avant le load mesh j'ai toutes les initialisations boutons par les fonctions à tableaux.
Puis le save restore scen avec les 136 valeurs pour les boutons du panel
puis le load mesh.

Avec F9, j'ai vu toutes les boucles for next se faire devant moi (passionnant ;)  )
puis ...
Crash sur le load mesh ... ce qui correspond bien à ton analyse à priori

Je me dis donc ... si dépassement tableau ... qu'à celà ne tienne ...
je fais le load mesh avant les initialisatioons panel et scenario ...
On verra bien ...

Deuxième test
Je place donc le loadmesh juste en dessous de classcap
void Irridium::clbkSetClassCaps (FILEHANDLE cfg)
{
exmesh_tpl = oapiLoadMeshGlobal ("Irridium\\Irridium");
if(exmesh_tpl)
{
    SetMeshVisibilityMode (AddMesh(exmesh_tpl),MESHVIS_EXTERNAL);
}

Crash sur le load mesh directement aussi  !!:wall:



Message modifié ( 03-09-2007 19:18 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #18 - 03 September 2007, 19:21:43
Si c'est le fichier msh qui est corrompu, je ne devrais rien avoir non plus lors d'un
lancement normal d'Orbiter.
Hors ça fonctionne. :doubt:
Bref, je tourne en rond ...



Message modifié ( 03-09-2007 19:24 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #19 - 03 September 2007, 20:20:09
essaie un truc comme ca à la place:

SetMeshVisibilityMode(InsertMesh(exmesh_tpl=oapiLoadMeshGlobal ("Irridium\\Irridium"),0),MESHVIS_EXTERNAL);

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #20 - 03 September 2007, 20:26:29

C'est pareil ... :sad:

Je fais le load du mesh du VC par cette méthode...
Se pourrait il que MSVC ne trouve pas le chemin d'accès au mesh  ...
Mais si j'écris ça, c'est Orbiter qui plante :wall:
Meshes\\Irridium\\Irridium


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #21 - 03 September 2007, 20:37:00
En passant essaie de séparer les deux, je'ai deja eu des truc bizarre avec ca (on est dans un truc bizarre la)

Code: [Select]
MESHHANDLE vcmesh_tpl;
MESHHANDLE exmesh_tpl;


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #22 - 03 September 2007, 20:37:44
visiblement ca plante dans la fonction, c'est donc un truc bizarre... et le log Orbiter il dis quoi quand tu lanc en debug
après la plantée.

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #23 - 03 September 2007, 20:53:19
Il ne dit rien quand c'est bien écrit ...
Il ne dit rien non plus quand je sépare les déclarations dans la classe


Finished initialising world
Module Irridium.dll [API v.060425]

Il s'énerve quand je met des écritures approximatives


**** WARNING: Mesh not found: .\Meshes\Irridium\Irridium.msh.msh
Module DeltaGliderIV.dll [API v.060425]
Finished initialising status
Finished initialising camera
Finished initialising panels
Finished setting up render state
**** WARNING: Mesh not found: .\Meshes\.msh

**** WARNING: Mesh not found: .\Meshes\Meshes\Irridium\Irridium.msh
Finished initialising status
Finished initialising camera
Finished initialising panels
Finished setting up render state
**** WARNING: Mesh not found: .\Meshes\.msh

Mais quoi que je fasse, MSVC continue de ne rien vouloir faire !!! :wall:


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #24 - 04 September 2007, 00:22:22
houamfff me suis endormi... je regarde ca maintenant...

Dan