[RESOLU] Crash - Comment trouver la provenance ?

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
Avatar de l’utilisateur
Silverglade
Messages : 264
Inscription : 04 Août 2012 17:52

[RESOLU] Crash - Comment trouver la provenance ?

Message par Silverglade » 02 Jan 2019 01:15

Bonsoir et bonne année!

J'avais supprimé mon post mais finalement me revoilà.
Comment peut-on trouver les raisons d'un crash d'un jeu fait avec unity ?
Je ne comprends rien aux logs ça ne met rien en évidence ou c'est flou et le diagnostic par élimination me rend CHAUVE.

Pitié enseignez moi.... je deviens fou!!

Explication: Projet avec une scène principale et d'autres scènes qu'on charge manuellement.
Aucun problème avec la scène de base ni la 2e, par contre la 3e provoque un crash au bout de 10min, systématiquement.
A force d'y virer des objets j'en ai trouvé un ou deux qui en les désactivant ne provoquent plus de crash.
Facile ? non. Ces objets ont des childs, en cherchant lesquels posent soucis, je me rend compte au bout de 48h de tests toutes les 10min (vie passionnante), que c'est totalement aléatoire. Un coup certains vont provoquer un coup plus, un coup un autre, un coup 2 en même temps un coup ca me soul un coup je vais sauter par ma fenêeeeeeeeeeeeeeeeeetre :pleur4:

Le pire, c'est devoir lancer ce jeu et attendre 10min à chaque fois! C'est long, c'est chiant, c'est totalement imprécis!
Dites moi qu'il existe un autre moyen...?

Si besoin, dernier crash:
Logs
Dernière édition par Silverglade le 02 Jan 2019 14:22, édité 2 fois.

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: Crash - Comment trouvé la provenance ?

Message par Moi 1971 » 02 Jan 2019 11:27

Bonjour,
pour trouver le problème il faut que tu te concentres sur ce qui est évident et qui clignote en rouge dans ton explication : 10mn=> crash.
Vu comment fonctionne Unity avec les boucles Update, le problème doit être situé dans une de ces boucles. A mon avis sans voir ton code, je pencherais sur des objets créés périodiquement (genre un chaque passage dans la boucle Update)
Comme l'ordi est un monde fini, créé à l'infini n'est pas possible. Soit , comme l'a dit Boubouk dans l'autre poste, le disque se rempli, soit c'est la mémoire allouée qui explose.
Bon courage.

Avatar de l’utilisateur
Silverglade
Messages : 264
Inscription : 04 Août 2012 17:52

Re: Crash - Comment trouver la provenance ?

Message par Silverglade » 02 Jan 2019 12:07

C'est plus ou moins ce que je pensais mais vu ce que je lis dans les logs j'ai pas pensé à regarder dans les update...
Bon, je suis bon pour revoir tous les scripts utilisés dans la scène quoi...

Un testeur m'a signalé un objet avec une texture manquante (en violet), ça peut créer un crash ça ?
Ca m'étonnerais mais bon. Je vais commencer par là.
Bon courage.
Merci :(

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Crash - Comment trouver la provenance ?

Message par boubouk50 » 02 Jan 2019 12:20

Utilise le profiler d'Unity pour trouver les fuites de mémoire.
Laisse tourner le jeu aussi dans l'éditeur, et regarde s'il n'y a pas de création d'objets inutiles ou qui auraient dû être supprimés, etc.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
Silverglade
Messages : 264
Inscription : 04 Août 2012 17:52

Re: Crash - Comment trouver la provenance ?

Message par Silverglade » 02 Jan 2019 12:51

Ca ne crash pas dans l'éditeur... Mes scripts ne créent pas d'objets non plus, ils ne font qu'animer ou désactiver des choses.
Je sais pas me servir du profiler non plus, c'est autant le bordel que les logs :roll:
Mais même sans savoir en regardant juste la mémoire il se passe rien dans le profiler...
Je vous dis ca me rend cinglé.

J'ai corrigé la texture signalé, c'est passé de 10min à 14min :nono:

La seule chose que je sais c'est que ça commence toujours avec ça:
UnityPlayer.dll caused an Access Violation (0xc0000005)
in module UnityPlayer.dll at 0023:605ada24.

DynamicHeapAllocator allocation probe 1 failed - Could not get memory for large allocation 16777216.
DynamicHeapAllocator allocation probe 2 failed - Could not get memory for large allocation 16777216.
DynamicHeapAllocator allocation probe 3 failed - Could not get memory for large allocation 16777216.
DynamicHeapAllocator allocation probe 4 failed - Could not get memory for large allocation 16777216.
DynamicHeapAllocator out of memory - Could not get memory for large allocation 16777216!

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Crash - Comment trouver la provenance ?

Message par boubouk50 » 02 Jan 2019 13:02

Tu compiles pour du 32bits? Quelle version d'Unity?

https://forum.unity.com/threads/crashes ... it.515435/
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
Silverglade
Messages : 264
Inscription : 04 Août 2012 17:52

Re: Crash - Comment trouver la provenance ?

Message par Silverglade » 02 Jan 2019 13:21

2018 3.0f2, je compile en x86 pour windows, par défaut et je suis en 64.

Entre temps j'ai re-regardé le profiler et en fait si, y'a un truc discret mais je pense important, au lancement j'ai 200 materials, quand je lance la scène qui pose soucis ça passe direct à 1000 2000 3000 4000... vers 15min je me retrouve avec plus 500 000! Faisant aussi monter la mémoire totale à 5go au lieu de 3 à la base.
En supprimant des objects suspects la multiplication se stop net.
Je suis sur la bonne piste ? :gene:

edit: la 2e scène les materials montent aussi mais elle elle ne crash jamais...
En soit c'est pas censé monter de toute façon ??

edit2: Est ce que ceci peut provoquer la multiplication en question ?

Code : Tout sélectionner

void Update()
    {
        Shader shader0n = Shader.Find("Self-Illumin/Diffuse");
        Shader shaderoff = Shader.Find("Diffuse");
}
edit3: Voilà ce qui provoque la multiplication:

Code : Tout sélectionner

GetComponent< Renderer > ().material.shader = shader0n;
 GetComponent< Renderer > ().material = textureOn;
En virant material.shader = shader0n; tout rentre dans l'ordre, je vais maintenant tester pour le crash...

Avatar de l’utilisateur
Silverglade
Messages : 264
Inscription : 04 Août 2012 17:52

Re: Crash - Comment trouver la provenance ?

Message par Silverglade » 02 Jan 2019 14:21

J'ai laissé tourner 20min aucun crash ::d
Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii :super: :super:

C'était donc bien un problème de "création" qui faisait péter un câble à la mémoire ^^

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [RESOLU] Crash - Comment trouver la provenance ?

Message par boubouk50 » 02 Jan 2019 14:24

Je suis tout a fait perplexe devant tes 2 lignes de code...
A chaque frame tu vas chercher toujours le même shader? Il faut le faire qu'une seule fois au Start ()!
Je suppose que tu affectes aussi le matériau à chaque frame...
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
Silverglade
Messages : 264
Inscription : 04 Août 2012 17:52

Re: [RESOLU] Crash - Comment trouver la provenance ?

Message par Silverglade » 02 Jan 2019 14:34

C'était un vieux code js de la doc que j'ai converti à la lettre sans réfléchir en passant à U 2018 lol.
Les shaders en soit ne sont même plus utilisés dans les scripts mais j'avais jamais capté...

Le material non il est dans des conditions.
Mais j'en profite du coup, a par créer une variable pour vérifier si un material est assigné, y'a un autre moyen de pas le faire à chaque frame excepté dans une condition ?

Répondre

Revenir vers « Unity le logiciel »