确定Eclipse中的Java应用程序是否处于调试模式

时间:2009-07-10 11:25:56

标签: java eclipse debugging logging

我想更改日志记录级别,具体取决于我是否正在进行调试,但是我找不到代码片段来检查应用程序是否在调试模式下运行。

我正在使用eclipse来调试应用程序,所以如果解决方案只能在Eclipse中运行,那就没关系了。

7 个答案:

答案 0 :(得分:50)

how-to-find-out-if-debug-mode-is-enabled

上找到答案
boolean isDebug = java.lang.management.ManagementFactory.getRuntimeMXBean().
    getInputArguments().toString().indexOf("-agentlib:jdwp") > 0;

这将检查是否使用了Java Debug Wire Protocol代理。

答案 1 :(得分:21)

您可以修改调试配置。例如,仅在“调试配置”中添加特殊VM参数。您可以使用System.getProperties()来读取提供的参数。

更好的是,修改配置(运行和调试)以加载不同的日志记录配置文件。如果您需要编写代码来确定日志记录级别,那就不好了。这应该只是配置问题。

答案 2 :(得分:7)

没有一种官方认可的方法来可靠地确定任何给定的JVM是否处于调试模式,而是来自JVM本身,并且依赖于工件只会在将来的某个时间内破坏您的代码。

因此,您需要自己介绍一种方法。建议:

  • 系统属性。
  • 环境变量(shell变量,如$ HOME或%HOME%)
  • 向JVM询问给定资源的物理位置 - http://www.exampledepot.com/egs/java.lang/ClassOrigin.html - 并根据它来做出决定(路径是否包含单词“debug”?是在jar内还是解压缩的类文件中? ?等)。
  • JNDI
  • 特定资源的存在或内容。

答案 3 :(得分:5)

您是否尝试在eclipse运行配置中添加vm参数?

将其作为VM Argument传递

-Ddebug=true

然后你可以Boolean.getBoolean("debug")进行检查。

答案 4 :(得分: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答案。)

答案 5 :(得分:0)

看看这里:

http://wiki.eclipse.org/FAQ_How_do_I_use_the_platform_debug_tracing_facility%3F

此外,我认为您无法知道您的应用是否在调试模式下运行。您可以做的唯一事情是在调试时将参数传递给JVM。

马努

答案 6 :(得分:0)

如果使用套接字(例如9999),则可以调用netstat来检查是否已建立连接:

#!/usr/bin/env python3
import pandas as pd
import numpy as np
# creating a data frame 
df = pd.read_csv("CSVData2.csv") 

#Change region to string

df['Region'] = df['Region'].apply(str) # I have tried both of these.
df['Region'] = df['Region'].astype(str)


df_out = pd.crosstab(df['Region'], df['Sales'], margins = True, margins_name = 'Total')


df_out.to_excel(r'/users/python/documents/DataFrametest.xlsx', sheet_name='Rawdata', index = True)    

然后在标准输出中扫描127.0.0.1:9999。*已建立