gdb – Empêcher la perte de trace en cas de situation de capture / réadressage

Est-il possible de relancer une exception sans perdre la trace arrière dans gdb? Ou y a-t-il un moyen dans gdb de “sauvegarder” quelques lignes et de revenir en arrière? Je suis sur GDB 7.7.1, la plus récente.

Je me trouve parfois dans des situations comme celle-ci, nécessitant une trace en arrière du lancer d’origine de l’exception et un commentaire sur les parties try / catch, la recompilation et la réexécution dans gdb.

try { someFuncThatCanThrowException(); } catch(exceptionType& exception) { if(@CAN_RECOVER@) { ... } else { throw; } } 

—-OU—-

 try { someFuncThatCanThrowException(); } catch(exceptionType& exception) { exception.printMessageToCout(); throw; } 

nécessitant une trace arrière du lancer d’origine de l’exception,

Est-il acceptable d’utiliser une approche simple d’impression de toutes les traces de tous les lancers, puis, s’il est nécessaire de rechercher une trace d’une exception particulière, il suffit de la trouver à l’adresse de l’exception. Quelque chose comme cette séquence de commandes gdb:

 set pagination off catch throw commands info args bt c end 

Lorsque vous avez besoin de retrouver la trace d’une exception, commencez par en afficher l’adresse, comme suit:

 print &exception 

Et trouvez son adresse dans la sortie gdb. Il doit être imprimé par info args . Dès que vous trouvez l’adresse, il y aura une trace de cette exception après la sortie de info args .