多執行緒環境下進行DEBUG

2021-10-01 02:08:01 字數 1373 閱讀 8062

工具使用的是idea

1. debug模式下斷點的作用方式有兩種,

all表示遇到斷點時,所有執行緒都會停滯在當前狀態中(並未掛起,依然都是可執行狀態),其他執行緒都無法繼續執行。當過掉這個斷點時,所有執行緒會同時開始爭搶cpu資源,這時是無法保證當前執行緒優先執行的。

thread表示只中斷當前執行此行**的執行緒,其他執行緒仍然可正常執行(當然,若有鎖爭搶的情況,也會導致其他執行緒等待)

2. 知道了上述特性,我們在debug測試時就可以做些文章了

在測試時,我們可以在多個執行緒上都打上斷點(根據需要)然後在frames選中切換執行緒進行除錯。

最後再提一下如何在debug過程中修改某個變數的值(這個以前的筆記應該有,重新寫一下吧)

個人了解的有三種方式:

下面兩種方式都可以,個人喜好

主要是第三種比較特殊,前面兩種修改是一次性的,而第三種是多次的,每次f6跳一行,它就執行一次

下面例子中,我在watches裡加入了dt.anint++,結果當我debug執行幾行**後(這幾行**對該變數無操作)anint的值直接增加到了6,事實上我沒按f6一次,它就執行一次。這樣的特性顯然沒什麼用處,也不是我們想要的,需要避免這個坑。

但是,它並不是沒什麼用的,假如我這樣寫,即可以保證,該變數在debug過程中,全程都是6這個值,某些時候,這又是我們想要達到的結果。

利用改變變數值的方式,以及切換執行緒進行除錯,可以更加方便的達到我們想要的除錯環境。以上都是個人理解,歡迎補充。

另外,eclipse支援修改**後自動resume重新執行(雖然某些共享資料可能會無法復原),但是idea似乎不支援。比如我在debug時發現某行**有個很簡單的錯誤,我修改之後又得重新啟動debug,不然改動不會生效,這就很麻煩。

所以這個不知道有沒有大神知道怎麼解決?

多執行緒環境下的shared ptr

多個執行緒讀寫同乙個shared ptr物件需要加鎖 注意分清shared ptr物件與shared ptr管理的物件 mutexlock mutex shared ptr globalptr void read void write 上面的read 和write 在臨界區之外都沒有再訪問globa...

多執行緒環境下實現單例模式

1 餓漢式 就是在使用類時就將物件建立完畢 例項 public class myobject public static myobject getinstance 測試 public static void main string args 結果 可見hashcode的值一樣的。所有相同物件 2 懶...

多執行緒環境下的死鎖是什麼?

死鎖是指兩個或兩個以上的程序在執行過程中,因爭奪資源或不正確的程序間推進順序,而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去,此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。雖然程序在執行過程中,可能發生死鎖,但死鎖的發生也必須具備一定的條件,死鎖的發生...