Idea Intellij多執行緒除錯

2021-07-10 14:16:54 字數 1278 閱讀 3883

(適用idea 14 & 15,其他版本未知)

幾天前遇到乙個問題:

在多執行緒除錯的時候,一些斷點會被跳過。

比如像下面的**:

public

static

void

main(string args) throws interruptedexception catch (interruptedexception e)

system.out.println("2"); // 斷點2

}}.start();

// 外線程

system.out.println("3"); // 斷點3

thread.sleep(2000);

system.out.println("4"); // 斷點4

}

啟動除錯後,可能會命中斷點1或者斷點3,命中路徑可以是3->2->4或者3->4甚至3->2,總之並不會命中全部斷點。在單步除錯的過程中,**的執行速度事實上遠比直接執行慢得多,所以我加入了一些sleep用來模擬這些延遲的過程。

這段**一共有兩個執行緒,在除錯乙個執行緒的過程中,很顯然另乙個執行緒是在執行的。所以我們可以猜測是不是idea是不是會在我們除錯乙個執行緒時,遮蔽另乙個執行緒的斷點。

為了驗證這個觀點,只需要在命中斷點0處之後單步,就會到斷點3,然會你除錯得「慢」一點,就會發現斷點1和2被跳過了。

打鉤的是我當前除錯的執行緒(main執行緒),當你開始單步除錯之後,這個堆疊會重新整理。

這顯然是不能接受的,對於多執行緒除錯來說,最重要的就是控制兩個執行緒的執行順序,我們要做的其實就是當另乙個不處於除錯狀態的執行緒命中斷點後,能先暫停,一直等到我去處理為止。

經過一番折騰後發現,其實idea提供了這個功能,在斷點處右鍵

它提供了兩種掛起的模式,預設的是all,只需要選中thread,它就會一直等待到你處理它。

右邊的make default功能會使得之後打上的斷點也會是thread模式的(注意,之前打上的不會變更,需要手工更改)。

兩個紅圈的按鈕就可以改,在debug視窗的最右邊。

之後就可以開心地除錯了,對了,在這裡切換執行緒

IDEA Intellij開啟自動make

idea intellij開啟自動編譯 2015 05 19更新 個人感覺自動make並不好用,特別是程式有錯誤需要查資料的時候也會make,所以還是關閉了 從eclipse轉移到intellij,還處於體驗期,感覺eclipse跑程式會快,而intellij則慢很多。跑了同乙個程式測試了時間,發現...

多執行緒 多執行緒原理

我們首先要知道什麼是多執行緒,說白了就是多個執行緒,執行緒是什麼呢,其實就是程序執行的途徑,那麼說道這裡我們又引入了乙個新的名字,就是程序,那麼我們來看看什麼是程序,其實我們自己也能看到,啟動電腦的任務管理器,我們就可以看到程序選項,裡面是我們電腦所有的程序,我們會發現有很多的程序.簡單地說就是程序...

多執行緒(一) tomcat 多執行緒

web server允許的最大執行緒連線數還受制於作業系統的核心引數設定,通常windows是2000個左右,linux是1000個左右。1.編輯tomcat安裝目錄下的conf目錄下的server.xml檔案 maxthreads 150 表示最多同時處理150個連線,tomcat使用執行緒來處理...