gpt4 book ai didi

java - Java 应用程序的调试/标准构建

转载 作者:行者123 更新时间:2023-12-02 12:51:25 25 4
gpt4 key购买 nike

问候,

我正在使用嵌入式java,我将应用程序写入低资源设备。我遇到的问题之一是当代码崩溃时设备会停止。我可以通过添加的一些日志记录从中获取一些信息。 (简单的打印语句)

由于内存限制,此日志记录无法保留在应用程序中。

我想知道是否有人知道是否有一个标志我可以传递给 JVM 来说明它是我需要的调试还是标准编译。

如果是调试版本,我希望包含打印语句,如果是标准版本,则要删除打印语句。我问这个问题是因为我必须不断剪切和粘贴语句等(这很痛苦)

谢谢

最佳答案

您可以利用 if (constant) 由编译器优化的事实。

在名为 DEBUG 的地方创建一个全局变量:

public static final boolean DEBUG = true;

然后像这样进行日志记录:

if (DEBUG) {
System.out.println("Debug");
}

要禁用调试,只需将 DEBUG 更改为 false,编译器就会优化掉所有日志语句。您可以通过使用 javap -c 查看生成的字节码来验证这一点。

例如:

class DebugTest {
public static final boolean DEBUG = true;
public static void main(String[] args) {
if (DEBUG) {
int a = 10;
System.out.println("a = " + a);
}
}
}

编译为:

Compiled from "DebugTest.java"class DebugTest extends java.lang.Object{public static final boolean DEBUG;DebugTest();  Code:   0:   aload_0   1:   invokespecial   #1; //Method java/lang/Object."":()V   4:   returnpublic static void main(java.lang.String[]);  Code:   0:   bipush  10   2:   istore_1   3:   getstatic   #2; //Field java/lang/System.out:Ljava/io/PrintStream;   6:   new #3; //class java/lang/StringBuilder   9:   dup   10:  invokespecial   #4; //Method java/lang/StringBuilder."":()V   13:  ldc #5; //String a =    15:  invokevirtual   #6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;   18:  iload_1   19:  invokevirtual   #7; //Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;   22:  invokevirtual   #8; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;   25:  invokevirtual   #9; //Method java/io/PrintStream.println:(Ljava/lang/String;)V   28:  return}

DEBUG 更改为 false 会产生:

Compiled from "DebugTest.java"class DebugTest extends java.lang.Object{public static final boolean DEBUG;DebugTest();  Code:   0:   aload_0   1:   invokespecial   #1; //Method java/lang/Object."":()V   4:   returnpublic static void main(java.lang.String[]);  Code:   0:   return}

关于java - Java 应用程序的调试/标准构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/869264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com