2010-11-11 19 views
1

En this MSO bug report, nos propres gaufres fait l'observation suivante:Comment l'emplacement d'un point d'arrêt peut-il affecter la découverte d'un bogue?

Ce bogue se trouve être également un Heisenbug, lors du débogage si votre premier point d'arrêt est trop tôt, pas à pas à travers montre que tout est bon.

(Ref: de Wikipédia entry on Heisenbugs)

Comment est-il même possible pour l'emplacement d'un point d'arrêt à faire une différence dans si un bug apparaît?

(Oui, je sais que l'article de Wikipedia répond, mais je pensais que ce serait une bonne question pour le SO d'avoir la réponse, et je parie que SO peut faire mieux de toute façon.)

Répondre

2

Si une activité asynchrone est en cours, cela peut affecter heisenbugs. par exemple. threads, E/S, interruptions, etc. La définition de points d'arrêt à différents emplacements affecterait le timing relatif du thread principal et les événements asynchrones qui pourraient alors potentiellement entraîner l'apparition ou la disparition de bugs liés.

2

Une source commune est le minutage, en particulier avec plusieurs threads. Imaginons que vous ayez une application graphique avec des gestionnaires d'événements et un bogue où une sélection de table n'est pas gérée correctement, peut-être parce que Swing commence parfois à mettre à jour la table avant que votre événement ne soit traité. En mettant en pause un thread à un point d'arrêt, vous pouvez modifier l'ordre dans lequel le composant de table reçoit des événements et ainsi vous pourriez voir un résultat différent avec et sans le point d'arrêt. C'est un problème très commun, et l'une des choses qui peuvent rendre le débogage des applications graphiques complexes avec beaucoup d'événements vraiment douloureux.