2010-05-04 3 views
4

Je débogue un programme avec GDB.c - Problèmes avec les opérations sur les bits

unsigned int example = ~0; 

me donne:

(gdb) x/4bt example 
0xffd99788:  10101000  10010111  11011001  11111111 

pourquoi ce n'est pas tous des 1? Je l'ai défini comme ~ 0 ... puis la ligne de code suivante est:

example>>=(31); 

et GDB me donne quand je tente d'examiner la mémoire à des bits:

(gdb) x/4bt example 
0xffffffff:  Cannot access memory at address 0xffffffff 

ce qui se passe ???

+0

Etes-vous sûr que cette ligne est en cours d'exécution? Il peut ne pas être initialisé si vous "n'exécutez pas" votre programme après l'avoir chargé et que la variable est globale. Mettez un point d'arrêt dans le main et regardez autour. – luqui

+0

Je sais que ça fonctionne. J'ai mis un point pour aller à une ligne avant de commencer à imprimer des choses – sepiroth

+1

@luqui: Il ne peut pas être global si la "ligne suivante" est 'example >> = (31);'. – Troubadour

Répondre

8

Vous devez prendre l'adresse de l'exemple dans la déclaration gdb:

(gdb) x/4bt &example 
5

Je pense que la commande x examine la mémoire, donc example serait interprété comme pointeur. Essayez

x/4bt &example 

ou simplement

print /x example 
0

Je n'ai pas vérifié le format de commande gdb mais regardant la dernière déclaration, il semble que vous voulez voir ce qui est à l'adresse mémorisée dans example au lieu d'imprimer example ... il semble que example est all 1s (0xffffffff) et vous essayez d'examiner cet emplacement en mémoire lorsque vous obtenez l'erreur.

Questions connexes