2009-04-25 18 views
2

Bien que je sois conscient des différences entre les versions de débogage et de version, je suis curieux de lier le débogueur à un processus (version intégrée ou débogage) qui traite le comportement? Pour référence, je développe sur HP 11.31 Itanium mais je suis toujours curieux pour le cas général.Est-ce que l'attachement à un processus le fait se comporter différemment?

+2

Quelle plateforme cible? –

+0

@ojblass: Salut, réécrit ton Q pour plus de clarté. J'espère que vous êtes d'accord avec ça. –

+0

semble mieux ... – ojblass

Répondre

5

http://en.wikipedia.org/wiki/Heisenbug#Heisenbug

Bien sûr, la fixation d'un débogueur va changer la synchronisation (qui peut changer par exemple les conditions de course de fil), ainsi que certains appels système peuvent détecter si un débogueur est attaché.

1

Il peut certainement, selon la plate-forme et la méthode de débogage. Par exemple, lorsque debugging on Windows, il existe réellement la fonction IsDebuggerPresent. Comme indiqué que la fonction peut être contournée, mais il existe d'autres moyens. Donc, fondamentalement, c'est compliqué.

+0

Waht vous dites est qu'il est possible pour une application de le savoir, mais je doute que c'est ce que le questionneur voulait savoir. Il est beaucoup plus utile d'expliquer de nombreuses façons dont une application peut agir différemment * sans avoir l'intention de *, puisque c'est le cas le plus souvent dans le débogage. – PanCrit

+0

La question n'était pas spécifique concernant les changements de comportement intentionnels/non intentionnels. Comme vous le constatez, il peut y avoir les deux. D'autres répondeurs ont étudié un peu les mécanismes des changements involontaires en mode débogage. Comme noté, il est relativement commun que l'allocateur de mémoire de diagnostic plus lent soit aussi un peu plus tolérant de certaines erreurs. –

0

Oui, j'ai souvent constaté que l'attachement d'un débogueur à un processus fait instantanément disparaître les bogues, pour les faire réapparaître lorsque je compile mon application en mode édition. Malheureusement, je ne peux généralement pas vraiment demander à tous mes utilisateurs d'ouvrir un débogueur uniquement pour exécuter mon application, ce qui peut être assez frustrant.

+0

Avez-vous attaché le débogueur à une version de version ou avez-vous compilé avec des indicateurs de débogage? – ojblass

+0

La compilation avec les indicateurs de débogage rend souvent la mémoire un peu différente. Je suis curieux de savoir comment attacher le débogueur. Je ne suis pas vraiment après l'effet des versions de débogage et de libération. – ojblass

1

Oui, beaucoup de choses à l'intérieur des structures de données de Windows changent quand un débogueur est attaché. Il modifie la façon dont la mémoire est allouée/libérée, ajoute du code interne et des marqueurs sur la pile (les valeurs F00D ont déjà été détectées dans la mémoire nouvellement allouée). En fait, de nombreux changements sont utilisés par les anti-débogueurs pour détecter une application. être débogué. Dans les langages interprétés (Java, .NET), le moteur d'exécution génère souvent des instructions machine différentes lorsqu'il s'exécute sous un débogueur pour l'intercepter et afficher des exceptions, afficher le code d'origine, etc. un débogueur est attaché.

Certains de ces changements affectent le comportement du logiciel et peuvent compliquer les bogues transitoires causés par des optimisations ou des dépendances extrêmement fines.

0

Une autre chose à garder à l'esprit est que pour les applications multithread attachant le débogueur peut certainement donner des résultats très différents. Ce sont les choses que l'on appelle «Heisenbugs».

0

Bien sûr, dans les applications multithread, attacher un débogueur peut donner des résultats différents. Cependant, qu'en est-il des codes qui ne sont pas liés aux threads?

J'ai vu une version de version, qui a un débogueur attaché, n'a pas de problèmes. Mais, quand un débogueur n'est pas attaché, il a des problèmes.
S'il est lancé en premier et qu'un débogueur y est attaché, il présente également les mêmes problèmes.