2009-08-13 1 views
0

Je veux utiliser rb_p() pour aider au déboguage d'une extension C ruby, mais chaque fois que je l'utilise, je reçois un SIGTRAP dans gdb!pourquoi suis-je obtenir un SIGTRAP dans gdb tout en déboguant l'extension Ruby C?

est ici un exemple:

(gdb) p user_defaults

$ 3 = 137559900

(gdb) rb_p d'appel (de user_defaults)

{: fill => true,: texture = > #}

(gdb) n

Programme signal reçu SIGTRAP, Trace/trap point d'arrêt. is_a_hash (try_hash = 137560420) à utils.c: 65 (gdb)

pourquoi cela se produit-il? Comment puis-je l'arrêter?

Répondre

1

SIGTRAP est provoqué par une exception de point d'arrêt, en particulier par l'instruction int3 sur x86 (interruption 3). Votre code exécute probablement un int3. Jetez un oeil où gdb vous dit - à utils.c ligne 65 dans la fonction is_a_hash(). Si vous n'avez pas accès au code source, vous pouvez au moins obtenir le démontage de gdb en tapant

disas try_hash 

à l'invite de gdb.

+0

que signifie exactement cette exception? quel est le but de celui-ci? Dites-vous pourquoi le code exécute cette instruction? – horseyguy

Questions connexes