Java可以在错误日志中输出变量名称和数据值吗?

时间:2013-12-30 04:42:50

标签: java backtrace

(我不是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)

从日志中,我了解到玩家正在尝试登录,并且正在加载玩家最后找到的世界数据,但是区域文件已损坏且文件数据中的数组无效。

但是哪个地区档案?它并没有告诉我。

使用变量名称和值可以使这些错误日志更加冗长,例如使用额外的启动java命令行设置吗?

我发现很难解释如何解释这些回溯痕迹。我假设每行末尾的数字是指源代码中的行号,但是我无法编辑代码,因此检查这些行的源代码无论如何都无济于事。

环境:Ubuntu 13.10

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

1 个答案:

答案 0 :(得分:0)

您真的想学习如何使用源代码级调试器。这些将允许您单步执行代码,停止在有趣的点或抛出异常,并检查(通常甚至修改)变量值。

哪个最好是一个品味问题,但我打算在这里打破规则并建议你尝试Eclipse环境,因为它是我用过的唯一一个真正做好集成的IDE代码编写,调试和管理。

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