Java 为了调试目的(为了跟踪程序流),记录所有方法是否是一种好的做法?
我正在开发一个android应用程序代码库,程序员已经正确地记录了每个应用程序方法的开始和退出。我发现理解应用程序流程非常奇怪,但同时也非常有帮助。这种做法节省了我在理解现有代码流以识别错误方法方面的大量调试工作 因此,我很好奇,以上述方式记录每个方法是否是一种好的做法?(我们总是可以设置一个标志,仅在需要/调试时启用此类日志)Java 为了调试目的(为了跟踪程序流),记录所有方法是否是一种好的做法?,java,android,performance,logging,Java,Android,Performance,Logging,我正在开发一个android应用程序代码库,程序员已经正确地记录了每个应用程序方法的开始和退出。我发现理解应用程序流程非常奇怪,但同时也非常有帮助。这种做法节省了我在理解现有代码流以识别错误方法方面的大量调试工作 因此,我很好奇,以上述方式记录每个方法是否是一种好的做法?(我们总是可以设置一个标志,仅在需要/调试时启用此类日志) 感谢它非常有效,但在特定情况下,如果有多个线程,它实际上会对系统资源造成破坏性影响,尤其是当您登录到单个文件时。但这可以通过将日志记录减少到可以在运行时切换的特定线程来
感谢它非常有效,但在特定情况下,如果有多个线程,它实际上会对系统资源造成破坏性影响,尤其是当您登录到单个文件时。但这可以通过将日志记录减少到可以在运行时切换的特定线程来解决
我的实现是:-
类跟踪器{ void informCall(对象…callArgs){ meth=TraceUtils.getPreviousMethod(); if(无条件| | tracerCodition.trace(trace.getCallerStackTraceElement())){ //因为跟踪方法可以知道我们在哪个线程中,所以这不是必需的参数 TraceLogger.inform(TraceType.Method,meth.traceString()+“/nargs:/n“+TraceUtils.argsString(callArgs)); } } } 注意:指定跟踪的条件可以提高调试效率,也可以将搜索集中在特定的点上。例如,可能会将跟踪下的方法设置为执行,直到达到某个条件。如果此特定方法终止得太快,则意味着跟踪将不有效,尤其是在存在有意的资源竞争条件或日志写入文件的情况,但设置跟踪条件以仅跟踪方法的特定数量的调用或在特定时间间隔进行跟踪将有助于提高效率 所以,我很好奇,以上述方式记录每个方法是否是一种好的做法?(我们始终可以设置一个标志,仅在需要/调试时启用此类日志) 总的来说,没有 这当然不是公认的良好做法 以下是一些优点和缺点:
1-如果是,您会在许多/大多数开源代码库中看到这种做法。我不记得曾经见过它
2-如果您找到一种方法,通过预处理器、构建/加载时代码注入或
If(compileTimeConstFlag)
constructs禁用它,您可以消除开销。但是,这样您就失去了打开和关闭跟踪的灵活性。而且对源代码的影响更大。就我个人而言,我会发现这非常嘈杂。记录特定的方法——手动或使用类似的方法——是合理的,但就个人而言,我反对记录每种方法。与其在未知水域游泳,不如打开噪音一段时间来解决手头的错误,一旦关闭这些噪音日志。相关:记录中的其他问题很有用,但如果走极端的话,它可能太吵了,最终你可能会错过真正有用的信息。我通常至少记录关键决策点或计算结果等,有时检查探查器/追踪器以了解发生了什么。无论如何,这主要属于主观性。
class Tracer{
void informCall(Object...callArgs){
meth=TraceUtils.getPreviousMethod();
if(noCondition||tracerCodition.trace(Trace.getCallerStackTraceElement())){
//since trace method can know which thread we are in that is not a necessary argument
TraceLogger.inform(TraceType.Method,meth.traceString()+"/nargs:/n"+TraceUtils.argsString(callArgs));
}
}
}