Question

Un collègue a un programme C qui échoue de manière prévisible en raison d'une mémoire corrompue. Il aimerait utiliser dbx pour surveiller l'emplacement de la mémoire une fois qu'il est alloué afin de localiser le code qui cause la corruption.

Est-ce possible? Si tel est le cas, quelle est la syntaxe pour produire un point d'arrêt au moment de la corruption?

Si non, quelle serait une bonne approche pour résoudre ce type de problème?

(Ma tactique habituelle consiste à examiner le contrôle de la source pour voir ce que j'ai changé récemment, car c'est généralement la cause. Mais le code en question a l'air de ne fonctionner que par chance. En outre, je me suis déjà éliminé comme coupable en n’ayant jamais travaillé avec le code.; -)

Était-ce utile?

La solution

Après avoir examiné plus en profondeur, il semble que la solution des versions récentes de dbx soit quelque chose comme:

stop access w <address>, <size>

Etant donné que <address> et <size> peuvent être des expressions, vous pouvez écrire des commandes telles que:

stop access w &p, sizeof(int)

Cela suppose que p est un pointeur et que nous souhaitons surveiller le premier mot sur lequel il pointe.

J'ai également rencontré un didacticiel sur le suivi et piétinant des bugs de mémoire. Il utilise gdb plutôt que <=>, mais les principes devraient être les mêmes.

Autres conseils

Sous AIX, vous souhaitez utiliser stophwp:

(dbx) help stophwp

stophwp <address> <size>

        Stop execution when the contents of the specified
        memory region change.  This is a accomplished in
        hardware and may not be available on all models.

Je ne suis pas un développeur Solaris, mais vous pouvez le faire avec des points d'arrêt physiques et gdb

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top