2009-07-10 52 views

回答

21

您可以修改調試配置。例如,僅在調試配置中添加一個特殊的VM參數。您可以使用System.getProperties()來讀取提供的參數。

更好的是,修改配置(運行和調試)來加載不同的日誌記錄配置文件。如果您需要編寫代碼來確定日誌記錄級別,這並不好。這應該只是一個配置問題。

2

如果要設置從您自己的程序調試級別,可能是這行:

public static final boolean DEBUG_MODE = System.getProperty("java.vm.info", "").contains("sharing"); 

會做的伎倆。

只是測試它在eclipse3.5:

package test; 

public class Test 
{ 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) 
    { 
     System.out.println(System.getProperty("java.vm.info", "")); 
    } 

} 

顯示:

mixed mode, sharing 

如果要是與調試發射執行而不調試

mixed mode 

推出


Joachim Sauer評論:

這是高度依賴系統。
我假設「共享」表示跨VM類共享處於活動狀態。
這是一項非常新的功能,僅在某些平臺上可用。
此外,可能有許多可能的原因來禁用它,所以我不會將它用於調試模式檢測。

(注:我用最新jdk1.6b14測試它在我離開這個作爲CW答案。)

+0

我想有可能是一個屬性,但我從調試啓動和運行啓動(使用Eclipse 3.3,Java的1.6.0_13,Ubuntu的9.04)性質的完全轉儲的測試是相同的。 (我也試過只是你的屬性,包括一個調試運行,我跨過了System.out行,並且運行和調試啓動都給出了'混合模式' – gojomo 2009-07-10 11:46:26

+1

這是高度依賴於系統的,我假設「共享」表示跨VM類共享是主動的,這是一個非常新的特性,只在某些平臺上可用,而且可能有很多可能的原因來禁用它,所以我不會將它用於調試模式檢測。 – 2009-07-10 11:52:37

+1

@Joachim:。好一點(我與最新的JDK 1.6b14在這裏)我會更新我的答案,並把它歸檔爲社區維基 – VonC 2009-07-10 13:30:32

3

您是否嘗試過在eclipse運行配置中添加vm參數?

喜歡的東西

-Dxxxx=true 

,您可以使用Boolean.getProperty("xxxx")進行檢查。

7

沒有一個官方認可的方式來可靠地確定,如果任何給定的JVM處於調試模式從JVM本身內,並依託文物只會破壞你的代碼在未來的一段時間。

因此您需要自己介紹一種方法。建議:

  • 系統屬性。
  • 環境變量(shell變量,比如$ HOME或%HOME%)
  • 詢問JVM有關給定資源的物理位置 - http://www.exampledepot.com/egs/java.lang/ClassOrigin.html - 並在此基礎上,做出決定(是否路徑包含單詞「調試「?它是在一個jar或一個解壓後的類文件?等)。
  • JNDI
  • 的所有腦幹或特定資源的內容。
相關問題