Java能否在错误日志中输出变量名和数据值?

Java能否在错误日志中输出变量名和数据值?,java,backtrace,Java,Backtrace,(我不是一个Java程序员,只是一个试图处理他人代码中缺乏异常处理和报告的最终用户。) 当Java回溯未处理的异常时,是否有方法从Java获取更详细的信息,如变量名和值 这是关于Minecraft服务器日志的,显然在某个地方有一个损坏的区块文件。错误跟踪似乎太模糊,无法准确地告诉我问题所在的位置,例如错误中涉及的特定数据文件名 2013-12-16 11:19:03 [WARNING] Failed to handle packet for PlayerName [/XX.XX.XX.XX:50

(我不是一个Java程序员,只是一个试图处理他人代码中缺乏异常处理和报告的最终用户。)

当Java回溯未处理的异常时,是否有方法从Java获取更详细的信息,如变量名和值

这是关于Minecraft服务器日志的,显然在某个地方有一个损坏的区块文件。错误跟踪似乎太模糊,无法准确地告诉我问题所在的位置,例如错误中涉及的特定数据文件名

2013-12-16 11:19:03 [WARNING] Failed to handle packet for PlayerName [/XX.XX.XX.XX:5046]: java.lang.ArrayIndexOutOfBoundsException: -448550
    at java.util.ArrayList.elementData(ArrayList.java:371)
    at java.util.ArrayList.set(ArrayList.java:399)
    at net.minecraft.world.chunk.storage.RegionFile.<init>(RegionFile.java:89)
    at net.minecraft.world.chunk.storage.RegionFileCache.func_76550_a(SourceFile:61)
    at net.minecraft.world.chunk.storage.AnvilChunkLoader.chunkExists(AnvilChunkLoader.java:63)
    at net.minecraft.world.gen.ChunkProviderServer.getChunkAt(ChunkProviderServer.java:167)
    at net.minecraft.server.management.PlayerInstance.<init>(PlayerInstance.java:38)
    at net.minecraft.server.management.PlayerManager.func_72690_a(PlayerManager.java:116)
    at net.minecraft.server.management.PlayerManager.func_72683_a(PlayerManager.java:175)
    at net.minecraft.server.management.ServerConfigurationManager.func_72375_a(ServerConfigurationManager.java:269)
    at net.minecraft.server.management.ServerConfigurationManager.func_72377_c(ServerConfigurationManager.java:335)
    at net.minecraft.server.management.ServerConfigurationManager.func_72355_a(ServerConfigurationManager.java:180)
    at net.minecraft.network.NetLoginHandler.completeConnection(NetLoginHandler.java:218)
    at cpw.mods.fml.common.network.FMLNetworkHandler.handleClientConnection(FMLNetworkHandler.java:171)
    at cpw.mods.fml.common.network.FMLNetworkHandler.onConnectionReceivedFromClient(FMLNetworkHandler.java:124)
    at net.minecraft.network.NetLoginHandler.func_72529_d(NetLoginHandler.java:194)
    at net.minecraft.network.NetLoginHandler.func_72532_c(NetLoginHandler.java:81)
    at net.minecraft.server.ServerListenThread.func_71766_a(ServerListenThread.java:57)
    at net.minecraft.server.dedicated.DedicatedServerListenThread.func_71747_b(SourceFile:29)
    at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:865)
    at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:320)
    at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:732)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:614)
    at net.minecraft.server.ThreadMinecraftServer.run(SourceFile:573)
2013-12-16 11:19:03[警告]无法处理PlayerName的数据包[/XX.XX.XX.XX:5046]:java.lang.ArrayIndexOutofBounds异常:-448550
位于java.util.ArrayList.elementData(ArrayList.java:371)
位于java.util.ArrayList.set(ArrayList.java:399)
位于net.minecraft.world.chunk.storage.RegionFile.(RegionFile.java:89)
位于net.minecraft.world.chunk.storage.RegionFileCache.func_76550_a(源文件:61)
位于net.minecraft.world.chunk.storage.AnvilChunkLoader.chunkExists(AnvilChunkLoader.java:63)
位于net.minecraft.world.gen.ChunkProviderServer.getChunkAt(ChunkProviderServer.java:167)
在net.minecraft.server.management.PlayerInstance.(PlayerInstance.java:38)
位于net.minecraft.server.management.PlayerManager.func_72690_a(PlayerManager.java:116)
位于net.minecraft.server.management.PlayerManager.func_72683_a(PlayerManager.java:175)
位于net.minecraft.server.management.ServerConfigurationManager.func_72375_a(ServerConfigurationManager.java:269)
位于net.minecraft.server.management.ServerConfigurationManager.func_72377_c(ServerConfigurationManager.java:335)
位于net.minecraft.server.management.ServerConfigurationManager.func_72355_a(ServerConfigurationManager.java:180)
在net.minecraft.network.NetLoginHandler.completeConnection(NetLoginHandler.java:218)
位于cpw.mods.fml.common.network.FMLNetworkHandler.HandleClient连接(FMLNetworkHandler.java:171)
位于cpw.mods.fml.common.network.FMLNetworkHandler.onConnectionReceivedFromClient(FMLNetworkHandler.java:124)
位于net.minecraft.network.NetLoginHandler.func_72529_d(NetLoginHandler.java:194)
在net.minecraft.network.NetLoginHandler.func_72532_c(NetLoginHandler.java:81)
位于net.minecraft.server.ServerListenThread.func_71766_a(ServerListenThread.java:57)
位于net.minecraft.server.dedicated.DedicatedServerListenThread.func_71747_b(源文件:29)
位于net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:865)
位于net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:320)
位于net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:732)
位于net.minecraft.server.MinecraftServer.run(MinecraftServer.java:614)
位于net.minecraft.server.ThreadMinecraftServer.run(源文件:573)
从日志中,我了解到玩家正在尝试登录,并且正在加载玩家上次所在的世界数据,但区域文件已损坏,文件数据中的数组无效

但哪个地区的档案?它没有告诉我

是否可以使用变量名和值使这些错误日志更加详细,例如使用额外的启动java命令行设置

我发现很难解释如何解释这些痕迹。我假设每行末尾的数字是指源代码中的行号,但我无法编辑代码,因此在这些行检查源代码也不会有任何帮助

环境:Ubuntu 13.10

java版本“1.7.0_25” OpenJDK运行时环境(IcedTea 2.3.12)(7u25-2.3.12-4ubuntu3)
OpenJDK 64位服务器虚拟机(构建23.7-b01,混合模式)

您真的想学习如何使用源代码级调试器。这将允许您逐步完成代码,在感兴趣的点或抛出异常时停止,并检查(甚至经常修改)变量值

哪一个是最好的在很大程度上取决于您的品味,但我要打破这里的规则,建议您尝试使用Eclipse环境,因为它是我使用过的唯一一个真正在集成代码编写、调试和管理方面做得很好的IDE


(Java运行时环境确实有自己的调试器,它可以做大部分相同的事情——但它是一个命令行工具,我认为新手学习起来要困难得多。有时它是正确的工具,主要是在您必须通过非常有限的连接远程工作时,但我不建议您从它开始。)

非局部变量,非局部变量。你能得到的唯一变量名是字段名,有时是参数名。@SotiriosDelimanolis我想他指的是变量的值(即文件名),你知道吗?对于通过日志进行调试,这是一个更好的选择。我还不是java程序员,所以除了上面显示的默认回溯之外,我不熟悉任何调试工具。我认识到OpenJDK是一个开发工具包Java,它可能提供自己的高级调试工具,但我现在只知道如何从bash命令行启动JAR。您有权访问产生异常的源代码吗?这假设用户有权访问源代码,原始问题中没有明确说明这一点。将JVM更改为“更详细地”记录似乎是要问的问题。您也可以在没有源代码的情况下非常轻松地进行调试。您所需要的只是一种分析变量和参数的方法。这有点难,但可行,而且非常狡猾。老实说,对于在eclipse/nb中进行调试,您所需要的只是类文件,它可以帮助您开始。源代码可访问性是一个优势,因为它允许您查看正在执行的代码。仅此而已。在许多情况下,源代码级调试器是0verkill,因为想要参数值基本上只是一种解决方法,用于解决无法包含在异常消息中的相关信息。也就是说,例外情况可能是