」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 無斷點調試

無斷點調試

發佈於2024-08-14
瀏覽:717

其他語言閱讀: English Español 中文

在典型的偵錯場景中,您將設定斷點來告訴偵錯器何時掛起程式。斷點通常對應於標記進一步調查的起點的時刻。

決定在哪裡設置斷點可能具有挑戰性。在某些情況下,確切的行不清楚,或者您可能更願意根據時間而不是特定程式碼來暫停程式。

在本文中,我們將了解 IntelliJ IDEA 的 Pause Program 功能 - 一種鮮為人知的調試技術,在某些情況下(包括上述情況)可能非常強大。我們將討論它的用例和局限性,並逐步發現其中的秘密。

什麼是暫停?

暫停程式是IntelliJ IDEA偵錯器的功能,可讓您在任何時間點任意暫停您的應用程式。此外,您甚至不需要知道應用程式程式碼。其實你可以忽略它!

Depurar sem Pontos de Interrupção

要暫停程序,請按一下偵錯器工具列上的暫停程序。然後,程式將在您正在做的任何事情中間停止。

限制

乍一看,暫停的程序可能看起來與在斷點處暫停的程序一模一樣。然而,這只是在某種程度上是正確的。

Depurar sem Pontos de Interrupção

暫停程式視為一種線程轉儲加上是正確的。您仍然可以像平常一樣檢查變數和執行緒。但是,一些更高級的功能(例如 Evaluate Expression)將無法運作。

使用案例

使用暫停程序的方法有無數種。它通常可以與傳統斷點互換使用。但是,在某些情況下,使用 Pause Program 是更合適的方法。讓我們考慮其中的一些。

應用程式無回應

如果遇到使用者介面 (UI) 凍結的情況,通常是因為 UI 執行緒被阻塞。

Depurar sem Pontos de Interrupção

Pause Program 在這種情況下可能很有用,因為它允許您在應用程式無回應時暫停應用程式並檢查 UI 執行緒的呼叫堆疊。這通常足以診斷問題。

缺少字體

如前所述,暫停程式允許您簡單地忽略原始程式碼,無論如何您可能會遺失原始程式碼。雖然這種情況並不常見,但是當你遇到這種情況時,斷點就沒有任何幫助了。

這就是暫停程序發揮作用的地方!

Depurar sem Pontos de Interrupção

鎖具

如果您懷疑有同步問題,例如死鎖或活鎖,Pause Program 可以幫助您找到導致問題的確切執行緒和鎖。

Depurar sem Pontos de Interrupção

在這種情況下,暫停程式並檢查執行緒清單。它將顯示哪些線程被阻止。當您導航到執行點時,您還將看到它們被鎖定的關鍵部分。這些資訊可以幫助指導您找到解決方案。

秘密的逐步提示

正如我之前提到的,暫停程式限制您對偵錯器的某些高級功能的存取。如果您嘗試在應用程式暫停時使用某些功能,您可能會看到錯誤訊息,顯示 在暫停操作後無法評估方法

Depurar sem Pontos de Interrupção

但是,有一個解決此限制的捷徑。

暫停應用程式後,繼續逐步執行任何操作。 Step IntoStep Over 即可。完成此操作後,您將進入常規偵錯會話,類似於使用斷點掛起應用程式時。所有高級功能現已解鎖!

結論

今天就這樣!我希望這些提示和技巧對您有所幫助。

如果您對更多與調試和分析相關的文章感興趣,請查看我的其他一些文章:

  • Debugger.godMode() – 使用偵錯器破解 JVM 應用程式
  • 調試器緩慢故障排除
  • 調試非活動應用程式
  • createDirectories() 有什麼問題? - CPU設定檔指南

如果您希望我介紹有關 Java 調試的任何具體信息,請隨時與我們聯繫!您的意見將有助於優先考慮並發布您最感興趣的內容。

版本聲明 本文轉載於:https://dev.to/flounder4130/depurar-sem-pontos-de-interrupcao-5ekk?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 找到最大計數時,如何解決mySQL中的“組函數\”錯誤的“無效使用”?
    找到最大計數時,如何解決mySQL中的“組函數\”錯誤的“無效使用”?
    如何在mySQL中使用mySql 檢索最大計數,您可能會遇到一個問題,您可能會在嘗試使用以下命令:理解錯誤正確找到由名稱列分組的值的最大計數,請使用以下修改後的查詢: 計數(*)為c 來自EMP1 按名稱組 c desc訂購 限制1 查詢說明 select語句提取名稱列和每個名稱...
    程式設計 發佈於2025-07-10
  • Go語言垃圾回收如何處理切片內存?
    Go語言垃圾回收如何處理切片內存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片時,了解垃圾收集行為至關重要,以避免潛在的內存洩...
    程式設計 發佈於2025-07-10
  • 如何解決AppEngine中“無法猜測文件類型,使用application/octet-stream...”錯誤?
    如何解決AppEngine中“無法猜測文件類型,使用application/octet-stream...”錯誤?
    appEngine靜態文件mime type override ,靜態文件處理程序有時可以覆蓋正確的mime類型,在錯誤消息中導致錯誤消息:“無法猜測mimeType for for file for file for [File]。 application/application/octet...
    程式設計 發佈於2025-07-10
  • 圖片在Chrome中為何仍有邊框? `border: none;`無效解決方案
    圖片在Chrome中為何仍有邊框? `border: none;`無效解決方案
    在chrome 在使用Chrome and IE9中的圖像時遇到的一個頻繁的問題是圍繞圖像的持續薄薄邊框,儘管指定了圖像,儘管指定了;和“邊境:無;”在CSS中。要解決此問題,請考慮以下方法: Chrome具有忽略“ border:none; none;”的已知錯誤,風格。要解決此問題,請使用以下...
    程式設計 發佈於2025-07-10
  • 為什麼不使用CSS`content'屬性顯示圖像?
    為什麼不使用CSS`content'屬性顯示圖像?
    在Firefox extemers屬性為某些圖像很大,&& && && &&華倍華倍[華氏華倍華氏度]很少見,卻是某些瀏覽屬性很少,尤其是特定於Firefox的某些瀏覽器未能在使用內容屬性引用時未能顯示圖像的情況。這可以在提供的CSS類中看到:。 googlepic { 內容:url(&...
    程式設計 發佈於2025-07-10
  • 如何使用組在MySQL中旋轉數據?
    如何使用組在MySQL中旋轉數據?
    在關係數據庫中使用mySQL組使用mySQL組進行查詢結果,在關係數據庫中使用MySQL組,轉移數據的數據是指重新排列的行和列的重排以增強數據可視化。在這裡,我們面對一個共同的挑戰:使用組的組將數據從基於行的基於列的轉換為基於列。 Let's consider the following ...
    程式設計 發佈於2025-07-10
  • 查找當前執行JavaScript的腳本元素方法
    查找當前執行JavaScript的腳本元素方法
    如何引用當前執行腳本的腳本元素在某些方案中理解問題在某些方案中,開發人員可能需要將其他腳本動態加載其他腳本。但是,如果Head Element尚未完全渲染,則使用document.getElementsbytagname('head')[0] .appendChild(v)的常規方...
    程式設計 發佈於2025-07-10
  • 反射動態實現Go接口用於RPC方法探索
    反射動態實現Go接口用於RPC方法探索
    在GO 使用反射來實現定義RPC式方法的界面。例如,考慮一個接口,例如:鍵入myService接口{ 登錄(用戶名,密碼字符串)(sessionId int,錯誤錯誤) helloworld(sessionid int)(hi String,錯誤錯誤) } 替代方案而不是依靠反射...
    程式設計 發佈於2025-07-10
  • 編譯器報錯“usr/bin/ld: cannot find -l”解決方法
    編譯器報錯“usr/bin/ld: cannot find -l”解決方法
    錯誤:“ usr/bin/ld:找不到-l “ 此錯誤表明鏈接器在鏈接您的可執行文件時無法找到指定的庫。為了解決此問題,我們將深入研究如何指定庫路徑並將鏈接引導到正確位置的詳細信息。 添加庫搜索路徑的一個可能的原因是,此錯誤是您的makefile中缺少庫搜索路徑。要解決它,您可以在鏈接器命令中添...
    程式設計 發佈於2025-07-10
  • 在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在C中的顯式刪除 在C中的動態內存分配時,開發人員通常會想知道是否有必要在heap-procal extrable exit exit上進行手動調用“ delete”操作員,但開發人員通常會想知道是否需要手動調用“ delete”操作員。本文深入研究了這個主題。 在C主函數中,使用了動態分配變量(...
    程式設計 發佈於2025-07-10
  • 如何使用不同數量列的聯合數據庫表?
    如何使用不同數量列的聯合數據庫表?
    合併列數不同的表 當嘗試合併列數不同的數據庫表時,可能會遇到挑戰。一種直接的方法是在列數較少的表中,為缺失的列追加空值。 例如,考慮兩個表,表 A 和表 B,其中表 A 的列數多於表 B。為了合併這些表,同時處理表 B 中缺失的列,請按照以下步驟操作: 確定表 B 中缺失的列,並將它們添加到表的...
    程式設計 發佈於2025-07-10
  • C++中如何將獨占指針作為函數或構造函數參數傳遞?
    C++中如何將獨占指針作為函數或構造函數參數傳遞?
    在構造函數和函數中將唯一的指數管理為參數 unique pointers( unique_ptr [2啟示。通過值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法將唯一指針的所有權轉移到函數/對象。指針的內容被移至功能中,在操作...
    程式設計 發佈於2025-07-10
  • 如何在鼠標單擊時編程選擇DIV中的所有文本?
    如何在鼠標單擊時編程選擇DIV中的所有文本?
    在鼠標上選擇div文本單擊帶有文本內容,用戶如何使用單個鼠標單擊單擊div中的整個文本?這允許用戶輕鬆拖放所選的文本或直接複製它。 在單個鼠標上單擊的div元素中選擇文本,您可以使用以下Javascript函數: function selecttext(canduterid){ if(d...
    程式設計 發佈於2025-07-10
  • 為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    使用php dateTime修改月份:發現預期的行為在使用PHP的DateTime類時,添加或減去幾個月可能並不總是會產生預期的結果。正如文檔所警告的那樣,“當心”這些操作的“不像看起來那樣直觀。 考慮文檔中給出的示例:這是內部發生的事情: 現在在3月3日添加另一個月,因為2月在2001年只有2...
    程式設計 發佈於2025-07-10
  • 在GO中構造SQL查詢時,如何安全地加入文本和值?
    在GO中構造SQL查詢時,如何安全地加入文本和值?
    在go中構造文本sql查詢時,在go sql queries 中,在使用conting and contement和contement consem per時,尤其是在使用integer per當per當per時,per per per當per. [&​​​​&&&&&&&&&&&&&&&默元組方...
    程式設計 發佈於2025-07-10

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3