[英]How do I fix Intellij debugging problems?
我正在嘗試切換到 Intellij,但是當我加載我的項目時,調試器似乎在跳過行並且在我嘗試單步執行時沒有跟蹤實際源代碼。 我知道這是一個模糊的問題,但有沒有人知道導致 Intellij 在調試時錯誤地鏈接到源代碼的問題?
我得到了同樣的問題。 您可以按照以下步驟操作:
謝謝 :)
我唯一能想到的是當前編譯的類與您用於調試的源不匹配。 在這種情況下,IntelliJ(或任何其他 IDE)會從類中獲取有關行號等內容的調試信息,然后將其映射到您正在查看的當前源,以顯示正在執行的代碼.
如果代碼已過時,或者版本(源代碼和編譯的類)以任何方式不匹配,則可能會發生調試器提供 IDE 信息以顯示某行,但該信息不正確提供當前源代碼,這可能會導致看起來像調試的“跳躍”行或只是停在沒有多大意義的地方。
你重建你的項目了嗎? 這些來源是否來自 Jar 中的類,您確定版本匹配嗎?
希望能幫助到你!
我一直在與基於 Gradle 的項目中的類似問題作斗爭。 我已經嘗試了 File -> Synchronize、Build -> Clean project、 gradle clean build
等的所有組合。刪除了 .gradle 緩存。 反編譯 .class 文件,它看起來像正確的版本。
最終,我最終刪除了項目中的所有build
和out
目錄,再次嘗試運行測試並最終選擇了當前的源版本。
我記得在 Eclipse 中我總是不得不處理Eclipse Dance 。 我想這是 IntelliJ 的版本。
更新:我發現這是一個隨機重復出現的問題,因此如果您正在運行 Bash 等效項,我創建了一個別名來執行刪除操作。 只需設置在你的別名.bashrc
或.zshrc
和運行deletebuilds
項目目錄中:
alias deletebuilds='find . | egrep "\.class$" | sed -e "s/\/build\/.*/\/build\//" | sort | uniq | xargs rm -rf'
這假設您編譯的類文件將進入build
目錄。 如果他們要去其他地方,請修改sed
部分。
您可以將 IntelliJ 配置為使用 Eclipse java 編譯器,這可能會解決您的問題。 從以下鏈接:
https://youtrack.jetbrains.com/issue/IDEA-8021
" 這不是關於著名的舊 javac 問題的第一個報告:對於某些 try/catch 和 if/else 結構,它生成了幾個字節碼指令,這些指令與行號錯誤地關聯。因此,在單步執行時,調試器遇到帶有不同行號的跳轉指令行號並決定停止(因為行號已更改) javac 不應該為該指令分配不同的行號。
您會在 Eclipse 中看到不同的行為,只是因為它使用自己的編譯器,而該編譯器沒有這個問題。 如果您將 Eclipse 配置為使用 javac 進行編譯,您將准確地看到所描述的行為。 或者,您可以將 IDEA 設置為使用 eclipse 編譯器來解決該問題(僅適用於當前 EAP 版本 - 構建 5xxx - 已與 eclipse 編譯器集成)”
另請參閱有關配置 Maven 以使用 Eclipse 編譯器的 Q:
在Project Structure (Ctrl+Alt+Shift+S) > Modules
,如果您已將調試模塊的任何 jar 添加到任何其他模塊的依賴項中,Intellij 可能會使用該 jar 的反編譯版本而不是最新的源代碼,因此執行將在反編譯版本的斷點處暫停。 即使從不依賴於已調試模塊的其他模塊調用已調試模塊,也會發生此問題。
要解決此問題,只需從項目結構中所有模塊的依賴項中刪除已調試模塊的 jar。 如果您不知道哪些模塊具有調試的模塊 jar 作為依賴項,您可以使用一些工具(例如 Sublime Text、bash、...)來搜索每個模塊中存儲在 Intellij *.iml
文件中的模塊名稱. 刪除后,您可能需要Sync the project
並執行Maven > Reimport
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.