gpt4 book ai didi

Java - 逐行 'debug report'

转载 作者:行者123 更新时间:2023-11-29 06:02:59 25 4
gpt4 key购买 nike

我正在构建的程序似乎在用户系统的某些点上卡住。当我测试完全相同的步骤时,我发现没有问题。尽管 Java 应该是独立于平台的 VM,但我的猜测是它与我们使用的系统有关(我在 linux 上,用户在 Mac 上),也许与文件访问有关。

我无法访问用户的系统,用户也不知道调试是什么意思。为了测试问题出在哪里,我想把程序的进度写成一个文件,等有问题的时候让他把文件发给我。因此我的问题:

是否有某种库允许将程序的逐行执行写入文件?理想情况下,还包括某些变量的值。

编辑:我熟悉 Logger,但是(如一个答案所说),这需要编写大量日志语句。有什么方法可以自动执行此操作吗?也许逐行是矫枉过正,但像记录每个方法进入/退出这样的东西肯定会起作用。

非常感谢!

最佳答案

这可能是 aspect-oriented programming 的一个很好的用例.具体来说,AspectJ library for Java 可能适合您的需要(还有其他的,但这是我最熟悉的)。您可以定义一个日志记录方面,它会自动将方法进入/退出日志消息插入到您希望跟踪的方法中,而无需修改这些方法的代码。每当您构建应用程序时,都可以根据需要包含或排除该方面(例如,在您解决问题之前,只为该用户包含它)。

类似下面的内容可能是一个好的开始:

aspect LogAllMethods {
Log log = new Log(); // pseudocode -- replace with whatever logging mechanism you like

before(): call(public * com.mycompany.*.*(..)) {
log.log("Entered method: " + thisJoinPoint);
}

after(): call(public * com.mycomapny.*.*(..)) {
log.log("Leaving method: " + thisJoinPoint);
}
}

这基本上是说,在包 com.mycompany 中调用任何公共(public)方法之前和之后,记录入口/导出和方法的名称(thisJoinPoint 是AspectJ 中的一个特殊变量,它指的是应用方面的程序执行中的点)。 AspectJ 文档有一些很好的教程和示例,用于定义方面以及如何使用它们,以及有关如何将方面引入您的应用程序的说明。

对于您的情况和 AspectJ 的未充分利用,这可能有点矫枉过正,但它应该允许您进行一些细粒度的调试,而不必向代码中的每个方法添加日志记录调用。

关于Java - 逐行 'debug report',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9455108/

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