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
.