2009-07-24 5 views
-1

On m'a demandé une fois lors d'une interview la question suivante, et je n'ai toujours pas été très clair sur la réponse. Je me demandais si quelqu'un savait où je pouvais en savoir plus, googling n'a pas beaucoup d'aide:Pourquoi une instruction log modifie-t-elle la sortie d'un programme?

Dites que vous avez un programme que vous souhaitez tester. Vous ajoutez une seule instruction de journal et soudainement, le programme qui produisait la sortie attendue arrête de produire la sortie attendue. Qu'est-ce qui aurait pu arriver?

+0

'print (" le compteur est à "+ i ++) \\ lol lol lol' – thecoshman

Répondre

3

Aha. Je l'ai fait arriver.

Considérons un programme qui a un bogue qui est en train de mélanger la pile. Si vous introduisez un journal ou une instruction d'impression, l'appel au journal peut déplacer la pile suffisamment pour l'amener à changer de comportement.

C'est un problème intéressant de penser à montrer un exemple. Probablement le plus facile à faire avec un mauvais format dans un printf ...

okay, dans les grandes lignes au moins un exemple ressemblera à ceci.

int parent(){ ... printf("%s\n", itoa(child())); 

int child(){ 
    int num; 
    scanf("%d%d", num); /* notice the format; scanf is going to eat more of the 
          * stack than it should. 
          */ 
    return num;   /* but this return may unwind the stack successfully. */ 
} 

Votre cas se passerait-il si vous insérez un printf() juste avant le retour.

+0

" se mêler à la pile "? Ming n'est pas un verbe et si c'était le cas, dans ce contexte je ne vois pas ce que cela a à voir avec la dynastie Ming en Chine. –

+0

+1: J'ai vu ça aussi, et c'est horrible de déboguer! –

+0

@Colin Minging est argot britannique pour laide, donc je lis cela comme uglifying :-) –

2

Votre programme peut avoir des conditions de concurrence entre les threads concurrents, de sorte que toute modification de la synchronisation peut changer le comportement du programme.

Habituellement c'est l'inverse, ce qui est bien pire (le soi-disant Heisenbug): Votre programme se comporte mal et vous voulez le déboguer en ajoutant une sortie de journal. Mais la sortie du journal fait disparaître le problème, il devient donc très difficile à diagnostiquer.

Questions connexes