2010-05-04 6 views
-1

J'ai trouvé un thread d'une application multithread qui se bloque dans VxWorks. Je n'ai pas d'informations de débogage. Lors d'une analyse plus approfondie, j'ai découvert que le plantage était dû à une modification de la valeur de l'adresse mémoire globale.Un problème étrange dans la mémoire de tas!

Cette adresse de mémoire globale (qui est une adresse à une fonction j'utilise un pointeur de fonction) est stockée à un emplacement d'adresse particulier dans le tas. J'ai trouvé que cette adresse de mémoire globale elle-même est réduite de 2, ce qui entraîne un accès incorrect et une erreur d'instruction de chargement.

Cela se produit de manière aléatoire. Mais, je suis vraiment surpris de ce qui peut entraîner la réduction de la valeur d'adresse de 2.

Toutes les suppositions ou idées ou indications dans n'importe quelle direction peuvent être utiles.

Répondre

4

Certains processeurs ont un point d'arrêt matériel qui vous permettra de rompre lors de l'écriture d'un emplacement de mémoire. Réglez le processeur à interrompre lorsque cet emplacement est lu ou écrit et regardez la pile quand il arrive à voir quelle fonction est en train de le faire.

+0

Merci beaucoup pour cette réponse. Nous explorons cela. Mais, y a-t-il d'autres façons de trouver? – Jay

+0

Vous n'avez pas besoin d'un autre moyen. Ce point d'arrêt matériel est * très * efficace si l'adresse de la corruption de mémoire se répète bien. –

+0

Depuis, l'occurance est aléatoire, je ne sais pas quand il se répète à nouveau. Donc, je veux un autre moyen à part ça. – Jay

Questions connexes