gpt4 book ai didi

java - 当我为 Lint 实现自定义检测器时如何调试 java 源代码?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:07:43 27 4
gpt4 key购买 nike

我是一名 Android 开发者。我已经通过实现新的 XXXDetector 和 XXXIssueRegistry 设计了自己的 lint 规则,这是我的源代码 fragment :

我的 XXXIssueRegistry 文件:

public class MyIssueRegistry extends IssueRegistry {
@Override
public List<Issue> getIssues() {

System.out.println("!!!!!!!!!!!!! ljf MyIssueRegistry lint rules works");
return Arrays.asList(AttrPrefixDetector.ISSUE,
LoggerUsageDetector.ISSUE);
}
}

我的 XXXDetector 文件:

public class LoggerUsageDetector extends Detector
implements Detector.ClassScanner {
public static final Issue ISSUE = Issue.create("LogUtilsNotUsed",
"You must use our `LogUtils`",
"Logging should be avoided in production for security and performance reasons. Therefore, we created a LogUtils that wraps all our calls to Logger and disable them for release flavor.",
Category.MESSAGES,
9,
Severity.ERROR,
new Implementation(LoggerUsageDetector.class,
Scope.CLASS_FILE_SCOPE));

@Override
public List<String> getApplicableCallNames() {
return Arrays.asList("v", "d", "i", "w", "e", "wtf");
}

@Override
public List<String> getApplicableMethodNames() {
return Arrays.asList("v", "d", "i", "w", "e", "wtf");
}

@Override
public void checkCall(@NonNull ClassContext context,
@NonNull ClassNode classNode,
@NonNull MethodNode method,
@NonNull MethodInsnNode call) {
String owner = call.owner;
if (owner.startsWith("android/util/Log")) {
context.report(ISSUE,
method,
call,
context.getLocation(call),
"You must use our `LogUtils`");
}
}
}

现在我可以通过 runnig 命令运行我的自定义 lint 规则:

$gradle lint

我将在控制台中获得预期的输出消息。

但我想调试我的 XXXDetector 源文件。我怎样才能做到这一点?如果我单击“调试”或“运行”或“构建”,我的自定义 lint 规则将不会运行!所以我必须在不支持调试的控制台中运行它。我该如何解决这个问题?

最佳答案

要调试自定义 lint 检查,您需要使用 -Dorg.gradle.debug=true 参数运行 Gradle lint 任务,例如:


./gradlew --no-daemon -Dorg.gradle.debug=true lintDebug

Gradle 将停止执行,直到附加调试器。

将调试器附加到本地进程:

Attach to local process

并选择一个对应的Java进程:

Select process

附加调试器后,Gradle 将继续执行,您将能够调试您的自定义 lint 规则:

Debugger window

关于java - 当我为 Lint 实现自定义检测器时如何调试 java 源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34785161/

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