标签:
调试器(如VS2008和老版GDB)往往只支持all-stop模式,调试多线程程序时,如果某个线程断在一个断点上,你的调试器会让整个程序freeze,直到你continue这个线程,程序中的其他线程才会继续运行。这个限制使得被调试的程序不能够像真实环境中那样运行--当某个线程断在一个断点上,让其他线程并行运行。
GDBv7.0引入的non-stop模式使得这个问题迎刃而解。在这个模式下,
让我们想象一下,有了这个功能后
因此,non-stop模式理所当然成为多线程调试“必杀技”。这2009年下半年之后发布的Linux版本里都带有GDBv7.0之后的版本。很好奇,不知道VS2010里是不是也支持类似的调试模式了。
1. 前提
gdb -v 查看版本信息
7.0以前不支持non-stop模式
2. 把一下3行添加到~/.gdbinit来打开non-stop模式
set target-async 1 set pagination off set non-stop on
然后 attach 到正在运行的线程
gdb thrname thrID
3. 然后可以用一下方式中断某个线程,其他线程保持运行; 或只运行某些线程 其他线程中断
3. 1 下断点到某个线程
b file:line thrNum
thrNum 可以在gdb中 用 info thr 命令查看
当这个线程执行到断点时,这个线程就停止了,但是其他线程不停止,还在继续执行
3.2 切换到某个线程
thr xthrNum
thrNum 可以在gdb中 用 info thr 命令查看
然后 输入命令继续执行这个线程 c
或者 执行某几个线程
thr apply thrNum1 thrNum2 ... continue
thrNum1 thrNum2 ... 为线程序号(用 info thr 命令查看)
GDB 多线程调试:只停止断点的线程,其他线程任然执行; 或只运行某些线程 其他线程中断
标签:
原文地址:http://www.cnblogs.com/lzpong/p/5881380.html