idea debug高階特性看這篇就夠了

2021-09-26 04:47:07 字數 1855 閱讀 5141

所謂工欲善其事必先利其器,從eclipse轉idea也有一段時間了。一直想總結下idea除錯的一些高階技巧。debug過程如果高效,擼**也會爽很多,不是嗎?

直接上例子說明,比如下面這段**

debug模式下除錯的時候,發現斷點並不會按照我預想的執行,子執行緒裡的斷點根本沒有執行,兩個子執行緒直接悄無聲息的就跑完了。說白了就是我們沒有辦法進入到執行緒裡斷點除錯。

有解決方案嗎? 當然

我們只需要對斷點做一些設定即可,

如上圖,把斷點的suspend模式改為thread,然後我們再去除錯,發現斷點可以按照我們預想的執行了。在debug視窗可以通過子執行緒名選擇進入子執行緒的流程單步除錯。

有時候在遍歷乙個迴圈的時候,我們只是想看某個條件下的變數狀態。通常情況下都是一遍遍執行直到到達我們想要的條件為止。

其實可以不用這麼麻煩,idea提供了條件斷點的功能,比如下面這段**:

我們右鍵斷點為止,設定i=5的條件斷點,然後debug執行。會發現程式在i=5的情況下才會進入斷點。

比如下面這段**

正常情況下我們除錯的時候,是看不到random到底是多少的。解決方法有乙個,就是把random的結果賦值到乙個變數裡,然後在除錯視窗觀察這個變數的值。

其實idea支援更方便的方法解決上面的問題。除錯視窗裡的settings -> show method return values開關可以顯示方法的返回值。

比如下面這段**,

當執行到if分支判斷時,可能不會進入我們想除錯的分支。通常情況下我們是會在**裡給number寫死乙個值進行除錯。但是這種方式修改了業務**,如果發布的時候忘記刪除,結果不堪設想。

idea有更加優雅的方式解決此類需求。

只需要在debug視窗,通過set value動態修改變數的值,就可以按照我們希望的分支繼續執行。是不是很給力!

除錯記憶體洩露的關鍵是能檢視堆記憶體的使用詳情,有了詳細的資訊才好定位出現問題的**。

我們先寫一段示例**,**中有各種型別的記憶體分配。

然後開始debug,在idea的右下視窗開啟memory view,

我一般是選擇開啟這幾個選項,

接下來在單步的過程中,就可以看到物件的分配情況。diff欄顯示的是每一步物件數目的變化,這個非常有用。因為通過這個你可以看到你的**對堆記憶體分配和**的動作。

參考:

Python高階特性

l csx sarah tracy bob jack print l 0 l 1 l 2 輸出 csx sarah tracy l 0 3 輸出 csx sarah tracy 如果第乙個索引是0,還可以省略 print l 2 輸出 bob jack print l 2 1 輸出 bob d fo...

高階OOP特性

注意 高階oop特性只在php5及以上版本支援 抽象類 命名空間需要5.3及以上 在php5中,將所有對物件都看作引用,而不是值。那麼如何建立物件的副本呢?答案就是轉殖物件。語法 destinationobject clone targetobject 可以在乙個類裡面定義乙個 clone 方法來調...

Python高階特性

python 高階特性 from collections import iterable from collections import iterator 切片 list切片 l list range 100 print l 0 3 取前3個元素 print l 3 取前3個元素 print l 4...