gdb 線程鎖與non-stop模式

1.前提
  gdb -v 查看版本信息
  7.0以前不支持non-stop模式

2.線程鎖
set scheduler-locking on/off 打開關閉
7.0以前的gdb默認當程序繼續運行的時候如果有斷點,那麼就把所有的線程都
停下來,直到你指定某個線程繼續執行(thread thread_no apply continue).
但是如果直接在當前線程執行continue的話,默認是會啓動所有線程。
所以如果有多個線程都是斷在同一個斷點(函數)上,就是說這個函數是多線程的,
那麼調試的時候就會出現異常情況。所以需要打開線程鎖。
只讓當前的線程執行,這意味着其他所有線程都不能執行了!


3. non-stop模式
set target-async 1
set pagination off
set non-stop on
同2不一樣,gdb啓動了不停模式,其實就是說,除了斷點有關的線程會被停下來,
其他線程會執行執行。在網絡程序調試的時候比較有用!

4.所以可以根據gdb的版本及你的實際代碼情況選擇到底是線程鎖還是non-stop模式

5. 屏蔽SIGPIPE
gdb中的套接字等關閉了,往裏面寫就會報錯!
 handle SIGPIPE nostop noprint ignore


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章