CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Dev-C++] Mode debug

Vengeur41
Vengeur41
Niveau 10
17 août 2005 à 22:13:38

Salut à tous,
Alors voilà, j´ai un segfault énorme dans mon jeu.
On m´a conseillé d´utiliser le mode debug de mon compilo/IDE.

Le seul problème c´est que mon jeu charge des fichiers de configuration au lancement.
Si il met 15 secondes en temps normal, ici il met un bon quart d´heure.
Et après dès qu´il y´a accès au disque ( et c´est très souvent que ca arrive) il me fait le meme coup.
Comment je fais pour débugger dans ces conditions ?

Y´a une solution ?

Merci d´avance

++
Vengeur

dynoplasmma
dynoplasmma
Niveau 9
17 août 2005 à 22:49:03

J´ai dja essayer debuger sur devC+, ca ma fait tout plater, alors j´ai fermer le programme avec ctrl alt.suppr :(

Je sais meme pas a quoi sa sert sinon !

LGV
LGV
Niveau 28
17 août 2005 à 22:49:44

revoir tes accés aux données, et le format dans lequel tu les stockes... 15 secondes de chargement, c´est relativement " énorme"

sinon, si tu as vaguement une idée de ce qui foire, tu peux prendre le temps de faire un environnement simplifié dans lequel recréer le bug ( genre un micro niveau avec 3 trucs qui se battent en duel, ne pas charger plein de ressources si elles ne sont pas vitales, etc.)

si tu n´as aucune idée d´où ton crash vient, commence par affiner : ne debugges pas, mais désactives successivement des morceaux de code ( hop, je vire l´IA des ennemis, hop, je lis plus les scripts, hop, je vire le chargement et l´affichage du niveau, etc.), jusqu´à identifier vaguement la cause du bug. Ensuite seulement tu peux utiliser le debuggeur pour une traque fine du probleme.

Vengeur41
Vengeur41
Niveau 10
18 août 2005 à 00:33:04

Malheureusement je ne peux pas désactiver les scripts puisque si je désactive les scripts je désactive les ennemis, le joueur et tout le reste.

Par contre j´ai énormément de tableaux et de structures et je fais souvent des accès un peu fouillis ( exemple :

resultat =
competence[(card[nowcard].competence-1)+5].degats[
card[nomcard].etat];

)

Mais je n´ai pas d´autres solution.

Maintenant un segfault ca a de grandes chances de venir d´un de ces machins...
Et sachant que ce genre de déclaration y´en a partout dans mon code ca va me prendre du temps...

JeanYvesYves
JeanYvesYves
Niveau 10
18 août 2005 à 09:49:25

un bon quart d´heure, puis acces disque puis plante ?
--> ça sent la saturation de mémoire, lance ton programme en regardant l´occupation mémoire du systeme : si tu vois qu´elle monte sans cesse sans redescendre, tu sauras déja ou chercher :)

godrik
godrik
Niveau 30
18 août 2005 à 10:03:41

si tu parle de segfault tu dois etre sous linux, tu as alors des amis.
gdb, valgrind, lint
si tu es sous windows, tu as des debuggeur aussi comme celui de visual, j´imagine qu´il y en a dans dev-c++, commence par chercher la ligne qui cause la seg fault.
si tu as des doutes sur certaines section de code, utilise la macro assert ( elle peut nous sauver la vie des fois).
Est ce que ton code est multi-thread ?

godrik
godrik
Niveau 30
18 août 2005 à 10:07:17

J´ai deux trois autres idées.
as tu compter les new/free dans ton application

Ah aussi !
est tu en C ou en C++ ?
Si tu es en C++, n´as tu pas une erreur du style, objet qui utilise des allocations dynamique sans avoir surcharger les constructeur par recopie et operateur d´affectation ?
tu peux aussi debuger a l´aide d´une classe array fait main, qui te permet de verifier la validité des bornes de tes tableaux ( surcharge de [] )

Vengeur41
Vengeur41
Niveau 10
18 août 2005 à 12:21:01

Il ne plante que longtemps après le chargement des fichiers ( 10 mn de jeu environ... Ca plante au niveau d´une boite de dialogue, mais la fonction semble être ok pourtant et en plus je l´utilise vachement souvent sans problèmes)

Sinon je suis en C, mon code est mono-thread et j´utilise des calloc et des free a tout bout de champs, j´utilise la SDL qui permet les segfault sous Windows :-d
En fait sous Linux le jeu est OK ( c´est a partir de Linux que je le développe et de temps en temps je rearde si il marche bien sous Windows) mais sous Windows il plante là.
Etrange.

Ca sert à quoi assert ?

Lapintade
Lapintade
Niveau 30
18 août 2005 à 12:26:41

10 minutes c´est grandement anormal . .. Pour savoir ou le code se trouve et perds du temps suffit de le lancer et de le stopper et de voir ou il est . .. tu recommence l´operation 5 ou 6 fois et tu saura que tu passes tout ton temps dans tel ou tel code, et ce sera ce code qui pose probleme.

Ca sert à quoi assert ?

Ca fait pareil que :

if ( valeur!=cequej´attend) affichemessageerreur;

Vengeur41
Vengeur41
Niveau 10
18 août 2005 à 23:53:16

Je voulais dire que le jeu tourne normalement après le chargement et l´interpretation des scripts, puis plante à un point bien précis ( après une boite de dialogue) si j´enlève la boite de dialogue en question, c´est celle d´avant qui plante ( j´en ai 3)... Et si je les enlèves toutes, eh bien c´est au blit d´après que ca plante...

Whaa n´empeche ce jeu me pose vachement de problèmes par rapport à mon précédent qui etait vraiment très cool ( quasiment jamais de bugs) alors que celui ci j´ecris une centaine de lignes d´un coup, 4 chances sur 5 qu´un segfault me saute dessus... Ca montre qu´il y´a un problème quelque part ca...

godrik
godrik
Niveau 30
19 août 2005 à 13:51:29

Passes tes outils de debuggages sous linux dans un premiers temps, ca peut te permettre d´isoler ton bug.
Si tu n´as pas d´erreur sous nux, alors tu sais que le bug est dans la partie windows.

Passes aussi les outils d´analyse de code, comme lint. Compiles tu bien en -W -Wall -pedantic ?

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment