2015-12-13 1 views
2

J'utilise gdb avec bochs-gdb pour déboguer une implémentation de mémoire virtuelle que j'écris. Chaque fois qu'une exception 14 (erreur de page) est levée, gdb interrompt le gestionnaire pour l'exception. Est-il possible de désactiver ce comportement afin que gdb ne casse pas sur les exceptions x86?Désactiver la rupture de GDB sur les exceptions x86

Répondre

2

Vous pouvez:

handle SIGSEGV nostop 

GDB ne s'interrompra pas faute de page mais imprimera un message. Vous pouvez également ajouter noprint.

Source:.

« Si vous ne voulez pas GDB pour arrêter les défauts de page, puis la commande poignée SIGSEGV nostop GDB imprimera un message pour chaque page faute, mais il pas revenir à une invite de commande. " link

+0

Cela semble être un pas dans la bonne direction, mais votre suggestion ne fonctionne pas. Ce n'est pas une erreur de segmentation (ce qui provoque l'envoi de sigsegv) c'est une erreur * page *. – Jon

+0

@Jon Ceci est câblé, je pensais que la faute de page entraîne des défauts de segmentation et la page liée confirme ma pensée. Cependant, ce n'est pas le cas. La recherche autour de cela semble que «les défauts de page peuvent entraîner une erreur de segmentation ou une erreur de bus» (et peut-être aussi dans d'autres signaux?). Vous pouvez essayer de gérer SIGBUS au lieu de SIGSEGV. –

+1

@Jon et terence: Un segfault est un type d'erreur de page: une référence de mémoire à une adresse virtuelle qui ne figure pas dans la table de pages. Cependant, un segfault (c'est-à-dire le noyau délivrant un SIGSEGV) ne se produit que lorsque le noyau décide que l'adresse virtuelle en question * ne doit pas * être ajoutée à la table de pages du processus. D'autres types de défauts de page sont gérés par l'un des éléments suivants: pagination dans la page à partir du disque, exécution de la copie réelle de la mémoire partagée en copie sur écriture (autre chose que j'oublie). Donc, la réponse dont vous avez besoin sera spécifique à bochs-gdb. –