web-dev-qa-db-fra.com

gdb: Comment puis-je faire une pause pendant l'exécution de la boucle?

J'écris un logiciel de rendu en g ++ sous mingw32 dans Windows 7, en utilisant NetBeans 7 comme mon IDE.

J'ai eu besoin de le profiler récemment, et ce besoin a atteint une masse critique maintenant que j'ai fini de poser la structure. J'ai regardé autour de moi, et pour moi cette réponse montre la plus grande promesse d'être simultanément multiplateforme et de garder les choses simples.

L'essentiel de cette approche est que la façon la plus simple (et à bien des égards, la plus précise) de profiler/optimiser est simplement d'échantillonner la pile de temps en temps en interrompant l'exécution ... Malheureusement, NetBeans ne fera pas pause. J'essaie donc de savoir comment faire cet échantillonnage directement avec gdb.

Je ne connais pas grand-chose à propos de gdb. Ce que je peux dire des pages de manuel cependant, c'est que vous définissez des points d'arrêt avant d'exécuter votre exécutable. Ça ne m'aide pas.

Quelqu'un connaît-il une approche simple pour obtenir gdb (ou d'autres outils gnu) pour:

  1. Goûtez la pile quand je le dis (préférable)
  2. Prélever un tas d'échantillons à des intervalles aléatoires sur une période donnée

... donne ma configuration indiquée?

32
Engineer

Avez-vous essayé d'exécuter simplement votre exécutable dans gdb, puis d'appuyer sur ^ C (Ctrl+C) quand tu veux l'interrompre? Cela devrait vous amener à l'invite de gdb, où vous pouvez simplement exécuter la commande where pour voir où vous êtes, puis poursuivre l'exécution avec continue.

Si vous vous trouvez dans un thread non pertinent (par exemple un thread d'interface utilisateur en boucle), utilisez thread, info threads et thread n pour aller à la bonne, puis exécutez where.

57
unwind