0

我的代码写得很糟糕,就像这样:

HashMap<String, TceFile> mapPresetLastKdf = new HashMap<String, TceFile>( (HashMap<String, TceFile>) RsessionVars.get( sessionVars, Constants.SVAR_ENC_PRESET_LAST_KDF_MAP ) );   
HashMap<String, String>  mapPresetApid    = new HashMap<String, String >( (HashMap<String, String >) RsessionVars.get( sessionVars, Constants.SVAR_ENC_PRESET_APID_MAP     ) );

显然,如果RsessionVars.get返回,第一行将失败null。在这种情况下,永远不会执行第二行。

但是,Eclips IDE 不会向我发出此故障的信号,它会继续执行,因为一切正常。

我很害怕我在这样的代码中有很多地方。我怎样才能检测到这些?

如何强制 Eclipse 停止并在这样的行上报告错误?

编辑
这似乎是异常处理的问题。

HashMap<String, TceFile> mymap = new HashMap<String, TceFile>( null ); 

这应该报告null指针异常。
为什么这个异常在任何地方都看不到?

4

4 回答 4

1

可以捕获的异常与根本无法捕获的异常的逻辑原因之间存在差异。在这种情况下,空值的返回和后续设置是有效的事情。很可能在随后的语句中,您尝试发送此变量(因此为 null)某个方法,并且您得到一个空指针异常。

在这种情况下,您只能在随后的空指针异常上中断,意识到原因是变量中的空值,然后返回并使用代码中的断点再次调试以查看该空值的来源。

于 2013-05-16T15:36:50.133 回答
0

您可能希望将代码分成多行并使用条件断点(如果显示了行号,您可以通过右键单击行号来实现)或使用带有普通断点的 if 语句。

过去我在条件断点和日食方面遇到过麻烦,所以我通常选择后者。

于 2013-05-16T14:16:04.520 回答
0

在创建 HashMap 之前,您可以绕过 eclipse 并编写一些通知您错误的内容:

if (RsessionVars.get(sessionVars, Constants.SVAR_ENC_PRESET_LAST_KDF_MAP) == null)
    System.out.println("RsessionVars.get() returned null");
于 2013-05-16T14:24:40.027 回答
0

也许您的工作区设置不正确以处理此类错误。如果你进入 Window -> Preferences -> Java -> Debug 你应该有一个可用的选项列表。您可能想要研究的是“暂停执行未捕获的异常”。如果选中,如果没有捕获到异常,Eclipse 将放置一个自动断点。

此外,如果您知道可能是什么类型的异常,您可以添加一个“Java 异常断点”,在 Debug/Breakpoint 窗口中可用(带有感叹号的“J”),当您知道什么时,这是一个有用的功能正在寻找。除此之外,将代码分成多行更易于阅读和调试。

于 2013-05-16T14:34:03.233 回答