調試器(如VS2008和老版GDB)每每只支持all-stop模式,調試多線程程序時,若是某個線程斷在一個斷點上,你的調試器會讓整個程序freeze,直到你continue這個線程,程序中的其餘線程纔會繼續運行。這個限制使得被調試的程序不可以像真實環境中那樣運行--當某個線程斷在一個斷點上,讓其餘線程並行運行。python
GDBv7.0引入的non-stop模式使得這個問題迎刃而解。在這個模式下,多線程
讓咱們想象一下,有了這個功能後app
所以,non-stop模式理所固然成爲多線程調試「必殺技」。這2009年下半年以後發佈的Linux版本里都帶有GDBv7.0以後的版本。很好奇,不知道VS2010裏是否是也支持相似的調試模式了。async
1. 前提
gdb -v 查看版本信息
7.0之前不支持non-stop模式測試
2. 把一下3行添加到~/.gdbinit來打開non-stop模式spa
set target-async 1 set pagination off set non-stop on
而後 attach 到正在運行的線程線程
gdb thrname thrID調試
3. 而後能夠用一下方式中斷某個線程,其餘線程保持運行; 或只運行某些線程 其餘線程中斷code
3. 1 下斷點到某個線程blog
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 命令查看)