gpt4 book ai didi

java - Java中如何防止 Debug模式的代码被编译成类?

转载 作者:行者123 更新时间:2023-11-29 03:16:30 25 4
gpt4 key购买 nike

在C/C++中,我可以如下使用

int main()
{

#if defined(DEBUG_MODE)
// The following code may contain sensitive messages.
// But these sensitive messages won't be compiled into the release binary.

A lot of debugging mode code here, which will bloat the final executable.
......
#endif

}

如何在 Java 中做同样的事情?

我想要的是减少类的最终大小并删除所有敏感的调试消息。

也就是说,下面的Java代码不是我想要的。

class A
{
public void f()
{
if (DEBUG_MODE)
{ // The following code may contain sensitive messages.
// So I want to remove them before release.
A lot of debugging mode code here, which will bloat the final executable.
......
}
}
}

最佳答案

您可以做的一件事是使用断言。这不会阻止代码到达您的最终 Jar 文件,但它会让您告诉 Java 完全忽略此代码;只有在 Java VM 上使用 -ea 标志时才会执行断言。

public class Test {
public static main(String... args) {
assert args.length == 3;
assert debug();


process();
}

// always runs
public static void process() {
// process
}

// only runs with -ea enabled
public static boolean debug() {
// debug
}

}

因此,在调试时,确保设置了 -ea 标志,断言将运行,在生产代码中运行时,不要设置 -ea 标志,调试代码将被忽略。

这个例子是荒谬的,但重点是展示调试代码如何不会影响生产代码。

关于java - Java中如何防止 Debug模式的代码被编译成类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26273803/

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