2012-07-21 65 views
38

我試圖將斷點放入GoogleAppEngine源(SDK 1.7.0),但IDEA Ultimate(11.0.2)只是告訴我Warning: No executable code found at line 482 in class com.google.appengine.api.memcache.AsyncMemcacheServiceImpl無法在Intellij IDEA中設置Java斷點

當我從單元測試運行代碼並啓動開發服務器時,我得到這個錯誤消息。

這是相當annonying。無論如何,我的源代碼位於外部(相對於IDEA主目錄和項目主目錄)目錄,我的jar文件位於Appengine SDK lib目錄下。

我的jar文件作爲項目庫添加​​到模塊中,並且我的源文件被附加到此庫。我也玩弄模塊依賴關係,但沒有任何運氣。最後,我決定把這個庫放到編譯範圍中,但是由於SDK在運行時提供了這些jar,所以我決定退回到提供範圍。

我還玩過模塊依賴關係選項卡上的導出複選框,但根據web help的說法,我認爲這是無關緊要的,導出只有在擁有從屬模塊時才重要,並且希望使這些模塊中的庫可用好。

無論如何,這個問題也產生了4 years ago也。所以我現在想知道是否真的很難解決這個問題?

我現在非常失望。到目前爲止,我對IDEA沒有任何問題...我也看到了這個問題arised to other people,所以這不是唯一的我猜。

任何幫助表示讚賞。


我編輯我的問題,由於我下面javap實驗:看來,階級和源不同步。我從SVN中檢出了1.7.0的相關修訂版本,並且使用的是1.7.0 SDK,因此它們不應該不同步。

回答

5

我發現了一些其他案例,其中人們報告IDEA說「找不到可執行代碼」。一種常見的模式是,他們試圖調試已經編譯而沒有調試信息的代碼。檢查您是否正在使用「-g」標誌(或等效標誌)進行編譯。

+0

嗯......這聽起來很符合邏輯... :)我會試着弄清楚它是如何構建的,但是因爲我不是編譯代碼的人(它是Google),所以我不知道我該怎麼做。對此有何建議? – 2012-07-21 11:30:52

+0

好的......我剛剛發現你的其他答案與如何查看調試信息是否可用有關......你真的是一個有幫助的人! :)我會試試看。 – 2012-07-21 11:38:32

+0

所以。我嘗試了成功反彙編類的'javap -v'命令。現在我所看到的只是保證了我以前的懷疑。反彙編的文件說'LineNumberTable:line 481:0'這正是方法頭的行號,我把我的斷點放入(我把它放在下一行)。所以看起來,課堂和來源是同步的(無論如何,這並不是一個大驚喜)。 – 2012-07-21 11:55:12

1

我有一個類似的問題,這是由於我的Tomcat配置中的部署選項卡下的「在服務器啓動時部署」錯誤導致的。我不小心把它變成了一個非常類似的項目:「戰爭爆炸」。當我將它改回來時,它運行良好。

47

我有類似的問題,並已應用各種嘗試。下面是我一貫的步驟:

  1. 如果您正在使用Maven依賴,去Maven項目 - >刷新
  2. 如果還是不行,請嘗試頂部菜單 - >構建 - >重建項目
  3. 如果仍然無效,請嘗試頂部菜單 - >文件 - >無效高速緩存/重啓
  4. 如果仍然不行,那麼$ CATALINA_BASE /斌/ catalina.sh停止,然後開始

之後,通常它會覆蓋99%的問題。否則,可能你將不得不考慮一些其他的可能性。

+0

Thx。爲我工作! – Antonio 2015-02-28 18:11:15

+0

有沒有辦法在不刪除本地歷史的情況下使緩存無效? – Goot 2015-04-07 10:08:35

+1

建設 - >重建項目爲我工作。感謝發佈! – jseals 2016-04-07 21:55:19

1

請確保你沒有運行Proguard。它幫助了我。

+4

這看起來更像是一條評論。 – 2014-10-28 14:04:05

8

我在Intellij有類似的問題。我無法在代碼片斷中添加斷點,我更改了代碼的行號,然後就可以放置斷點。看起來像的IntelliJ

+0

我有完全一樣的情況:( 當我改變線我可以把斷點! – Sergio 2015-08-13 14:49:15

1

菜單中的錯誤 - >文件 - >無效高速緩存/重啓

這爲我工作的IntelliJ 13.0.2

1

下,如果你使用的是一些服務器,他們將進入「低內存模式「,這意味着它們不會爲您調試,無論您選擇哪種選項或緩存都無效。

您應該停止服務器,增加傳遞給java的選項的內存設置並重新啓動服務器。檢查日誌以確保您不會收到諸如「在低內存模式下運行」之類的報告。

1

有同樣的問題,發現服務器上的代碼和我正在調試的代碼版本不同。在同步代碼後,問題已解決。

0

在我的情況下,我殺死了設備上的所有正在運行的進程並斷開並重新連接它。

2

這個問題相當古老,但我認爲我的經驗可能會在未來幫助某人。在我的情況下,我試圖調試沒有用調試信息編譯的代碼。我正在使用maven,其中修改之前的原始父pom文件在構建部分中看起來如下所示。

<build> 
    <pluginManagement> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.1</version> 
      <configuration> 
       <target>${javaCompilerVersion}</target> 
       <source>${javaCompilerVersion}</source> 
       <encoding>UTF-8</encoding> 
      </configuration> 
     </plugin> 
     <!--More plugins...--> 
    </pluginManagement> 
</build> 

我改變了上面的部分,使它看起來像下面。

<build> 
    <pluginManagement> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.1</version> 
      <configuration> 
       <target>${javaCompilerVersion}</target> 
       <source>${javaCompilerVersion}</source> 
       <encoding>UTF-8</encoding> 
       <debug>true</debug> 
       <debuglevel>lines,vars,source</debuglevel> 
      </configuration> 
     </plugin> 
     <!--More plugins...--> 
    </pluginManagement> 
</build> 

注意添加<debug><debuglevel>元素。 debuglevel元素可以採用由逗號分隔的三個參數的任意組合。

編譯完這個變化後,我終於在IDEA中設置了斷點。

0

問題的實質是JVM執行一個類文件(簡單的類或從類路徑中的jar中加載的類),它們不會與調試器使用的源匹配。 一旦理解了這一點,解決方案很簡單:確保源表示正在執行的類。 因此,要解決您可以刷新的問題 - 將源同步到類中,等等。

0

我在使用調試配置時遇到了同樣的問題,例如Tomcat。 我嘗試了以上所有,但沒有。 當我剛剛重新配置Tomcat(調試>編輯配置>刪除tomcat>從頭再次添加它)它終於工作:)

0

重新啓動您的電腦。 它解決了我的情況。 簡單的就是最好的..

1

我能夠在問題重新編譯的類來解決這個問題: 建設 - >重新編譯(filename.java)

0

檢查您的磁盤空間,並釋放一些內存。如果磁盤空間不足,即使服務器不處於「低內存模式」,intelliJ也不會分配空間來緩存調試所需的類。因此它不允許你設置斷點。