Partage
  • Partager sur Facebook
  • Partager sur Twitter

comment arrêter un programme en cours d'execution

3 novembre 2011 à 11:04:16

C'est tout con, mais je n'ai rien trouvé sur le web. D'où l'intérêt de cette question (ou plutôt d'une réponse éventuelle !)
Même avec firebug, j'ai pas trouvé !
Le seul moyen pour le moment est d'arrêter l'execution du navigateur (avec un truc comme alt+ctrl+suppr). Bon, on peut aussi débrancher l'ordinateur :colere2: , mais tout ça m'a l'air quand même assez violent (effets secondaires gênant, ne serait-ce que le temps perdu). Je trouve ça incroyable qu'il n'y ait pas plus "fin" comme méthode !!

Même lorsque j'exécute un programme pas à pas avec firebug, pas moyen de sortir tout de suite du programme! De l'arrêter vraiment, quoi !
Ce serait vraiment très utile, surtout lorsque l'on est dans une boucle infinie...
Or, il y a comme une malédiction qui fait qu'une fois commencé, le programme impose de mener son exécution jusqu'au bout, même si ça doit durer une éternité (un peu comme dans jumanji) ;) !
:euh:
D'avance, merci !
  • Partager sur Facebook
  • Partager sur Twitter
3 novembre 2011 à 11:18:01

Tu entends quoi par programme ? Ca veut tout dire et rien dire.
  • Partager sur Facebook
  • Partager sur Twitter
3 novembre 2011 à 11:31:12

je parle ici d'un programme informatique (pas d'un programme politique, par exemple).
Et plus précisément, au vu de la rubrique du forum où est publiée la présente discussion, d'une série d'instructions codées en javascript.
Un truc comme ça par exemple :
<script type="text/javascript">
var haut=document.getElementById('haut');
if (haut.innerHTML=="desolation") alert('horreur, malheur !');
</script>

:)
  • Partager sur Facebook
  • Partager sur Twitter
3 novembre 2011 à 11:36:13

Oui j'avais saisi qu'on parlait pas de programme politique... Dans ces cas-là dit un script JS, histoire d'appeler un chat, un chat.

Je comprends pas trop le but du sujet, un script ne s'arrête pas s'il est pas codé pour. Enfin c'est pas toujours vrai, y'a parfois une notion de timeout, je pense à PHP où par défaut un script s'arrête au bout de 30 secondes s'il n'a pas terminé.

Après pour les autres ça n'existe pas forcément. En JS tu fais ton CTRL + ALT + SUP et point barre...
  • Partager sur Facebook
  • Partager sur Twitter
3 novembre 2011 à 12:03:26


Citation : Desolation

Je comprends pas trop le but du sujet, (...) En JS tu fais ton CTRL + ALT + SUP et point barre...

Le but du sujet est : est-il possible de sortir de l'exécution d'un "script" sans planter la navigateur ?
Il semble que la réponse soit "non", mais je trouve ça assez étonnant, en 2011 !
  • Partager sur Facebook
  • Partager sur Twitter
3 novembre 2011 à 12:06:40

C'est entre autre pour cela que Chrome procède par processus, 1 onglet = 1 processus. Si 1 onglet plante, seul lui plante et non le navigateur.

Pour X raisons, boucles infinies, erreurs d'exécution de plugins (Adobe par exemple), etc.
  • Partager sur Facebook
  • Partager sur Twitter
3 novembre 2011 à 18:51:59

C'est aussi pour ça que tous les navigateurs proposent par défaut d'arrêter un script qui prend trop de temps. Ce "trop" de temps dépends des navigateurs et des options que tu peux paramétrer.

Et si tu es dans un outil de debug comme firebug ou équivalent, il te suffit d'exécuter la commande break (ou return dans une fonction) pour quitter ta boucle infinie. Et ainsi éviter de redémarrer ta page (ou ton navigateur (ou ton ordinateur)).

Je ne vois pas trop ce que tu veux de plus...
  • Partager sur Facebook
  • Partager sur Twitter
3 novembre 2011 à 18:54:35

throw new Error( 'OMG YOU FAIL!' );
  • Partager sur Facebook
  • Partager sur Twitter
3 novembre 2011 à 19:16:16

Si tu veux seulement exécuter l'alerte une fois, pourquoi ne pas mettre la condition dans une fonction et l'appeler une fois ? ou alors j'ai mal compris o_O
  • Partager sur Facebook
  • Partager sur Twitter

Je vous ai aidé ? Appuyez sur le bouton "Ce message est utile", avec le pouce levé vers le haut !  (en bas à gauche de mon message)

3 novembre 2011 à 19:30:12

Je crois que son problème n'est pas un problème de code mais un problème d'appréhender un code foireux.

Donc il s'agit plus d'utiliser les outils autour du javascript.


C'est vrai que lancer le throw dans la console a le mérite d'arrêter le code que ce soit une boucle (while/for) ou une itération.
  • Partager sur Facebook
  • Partager sur Twitter
3 novembre 2011 à 19:57:45


Citation : restimel

Je crois que son problème n'est pas un problème de code mais un problème d'appréhender un code foireux.

Effectivement : je me place côté exécution, ici, et non pas "programmation".

Citation : restimel

C'est aussi pour ça que tous les navigateurs proposent par défaut d'arrêter un script qui prend trop de temps. Ce "trop" de temps dépends des navigateurs et des options que tu peux paramétrer.

Voilà une piste intéressante. Il me semblait bien avoir vu ça, une fois, mais là que j'en ai besoin, ça ne fonctionne pas.
Où se trouve ce paramétrage sur firefox ?


Et pour le "throw" ou la "commande break" dans la console, on fait comment ??

  • Partager sur Facebook
  • Partager sur Twitter
3 novembre 2011 à 20:51:58

Sous firefox, tu peux parametrer le temps d'execution max.
Sous Chrome, si tu clic sur fermer l'onget ca le fait sans trop de probleme.
  • Partager sur Facebook
  • Partager sur Twitter
3 novembre 2011 à 22:29:52

Citation : terpi


Où se trouve ce paramétrage sur firefox ?


Pour Firefox : Dans ta barre d'adresses, tu écris about:config puis tu cherches l'option dom. max_script_run_time. En changeant sa valeur tu changes le temps maximum d'exécution d'un script.

Si tu veux voir la description de toutes les options tu peux consulter ce site (en anglais)

Citation : terpi

Et pour le "throw" ou la "commande break" dans la console, on fait comment ??

Soit tu l'utilises directement comme commande dans la console, soit tu l'entres comme variable à suivre (watch) cela exécutera ta commande pour donner le résultat.
  • Partager sur Facebook
  • Partager sur Twitter
3 novembre 2011 à 23:02:30

Oui enfin moi quand j'ai un script qui s'exécute dans mon navigateur (genre boucle infinie), cela freeze mon onglet donc pour ouvrir la console de débugage ce n'est pas toujours facile.

Et si un site a des boucles infinies dans ses codes JS, renie le :D
  • Partager sur Facebook
  • Partager sur Twitter
Mon Twitter : @Amatewasu
3 novembre 2011 à 23:13:14

Quand tu utilises la console c'est que généralement c'est ton code et que tu cherches à savoir pourquoi il plante. Et quand t'es en mode pas à pas et que tu te retrouves dans cette boucle c'est plus pratique de sortir "proprement" que faire planter son navigateur.
  • Partager sur Facebook
  • Partager sur Twitter
3 novembre 2011 à 23:55:32

Une boucle infinie, tu te fais avoir une fois mais apres, t'as rajoute un compteur a l'arrache qui throw au bout de 9k iterations.
  • Partager sur Facebook
  • Partager sur Twitter
4 novembre 2011 à 9:29:01

Pour la proposition d'arrêt par le navigateur, je viens de tester ce matin, et ça fonctionne bien au bout de 10 s( temps par défaut).
Pourtant, il me semble bien que ça déconnait hier. o_O
Il est vrai qu'avec ce mécanisme, ça va déjà beaucoup mieux.

Concernant la technique avec firebug, ça a l'air intéressant, mais je ne suis pas encore parvenu à la mettre en oeuvre.
Si je tape "break" dans la console lors de l'execution du programme, même pas à pas, j'ai le message :
>SyntaxError: unlabeled break must be inside loop or switch
Un peu comme si ladite commande n'était pas intégrée dans le programme en cours d'exécution (ce qui peut sembler logique d'ailleurs).
Est-il réellement possible de modifier un progra...oups pardon, script, en cours d'exécution ??
Parce qu'en attendant, il ne m'est toujours pas possible d'interrompre un script en cours d'exécution (même pas à pas) dans firebug.
Le plus simple eut été qu'il y ait une touche "stop" (petit carré) comme il y a une touche "run" (petit triangle) (il y a bien la pause !).... :)
  • Partager sur Facebook
  • Partager sur Twitter