gdb:如何在循环执行期间暂停?

Eng*_*eer 34 c++ debugging gdb netbeans gnu

我正在使用NetBeans 7作为我的IDE在Windows 7中的mingw32下使用g ++编写软件渲染器.

我一直需要对它进行描述,而这种需求已达到临界质量,因为我已经过去了解结构.我环顾四周,对我而言,这个答案显示了同时跨平台和保持简单的最大希望.

这种方法的要点是,可能最基本的(在许多方面,最准确的)分析/优化方法是直接通过暂停执行来直接对堆栈进行采样......不幸的是,NetBeans 不会暂停.所以我试图找出如何直接使用gdb进行此采样.

关于gdb,我不太了解.但是,我从手册页中可以看出,您运行可执行文件之前设置了断点.这对我没有帮助.

有没有人知道一个简单的方法来获取gdb(或其他gnu工具):

  1. 当我这么说时(优先)采样堆栈
  2. 在给定的时间段内随机抽取一大堆样本

...给出我陈述的配置?

unw*_*ind 58

您是否曾尝试在gdb中运行可执行文件,然后只是Ctrl+C在想要中断它时点击^ C()?这应该会让你进入gdb的提示符,在那里你可以简单地运行where命令来查看你的位置,然后继续执行continue.

如果您发现自己处于不相关的线程(例如循环UI线程),请使用thread,info threadsthread n转到正确的线程,然后执行where.

  • 想通了,gdb显然没有(总是?)知道正确的线程是什么,它只是选择线程列表顶部的那个,至少在我的mingw安装中.我只需要做gdb命令`thread`,`info threads`和`thread n`,其中n是我正在运行的程序的线程的编号.再次感谢. (4认同)
  • Ctrl + C对某些人不起作用:http://stackoverflow.com/questions/5857300/gdb-ctrlc-doesnt-interrupt-process-as-it-usually-does (4认同)