我有一个来自客户的错误,当我查看日志时,我们跟踪异常,某些堆栈跟踪没有行号:
at xxxx.xxx.xx.x.xx.DayIntervalRule.getInterval(DayIntervalRule.java)
at xxxx.xxx.xx.x.xx.XXSchedule.getNextDueDate(XXSchedule.java)
at xxxx.xxx.xx.x.xx.XXSchedule.evaluateRules(XXSchedule.java)
请注意:我已将包名称替换为“ xx”),并且所有类和方法均在我们的应用程序中定义:
完整的堆栈跟踪如下:
java.lang.NullPointerException
at xxxx.xxx.xx.x.xx.DayIntervalRule.getInterval(DayIntervalRule.java)
at xxxx.xxx.xx.x.xx.XXSchedule.getNextDueDate(XXSchedule.java)
at xxxx.xxx.xx.x.xx.XXSchedule.evaluateRules(XXSchedule.java)
at xxxx.xxx.xx.x.xx.EvaluateRulesVistor.visitXXNode(EvaluateRulesVistor.java:56)
at xxxx.xxx.xx.x.xx.XXNode.accept(XXNode.java:396)
at xxxx.xxx.xx.x.xx.AssetXX.traverseForest(AssetXX.java:351)
at xxxx.xxx.xx.x.xx.AssetXX.run(AssetXX.java:70)
at xxxx.xxx.xx.x.xx.XXEngine.doForecast(XXEngine.java:437)
at xxxx.xxx.xx.x.xx.XXEngine.forecastWorkOrders2(XXEngine.java:380)
我对为什么会发生这样的事情很感兴趣,我的客户是否有可能对现有代码(自定义)进行某些处理?
不显示行号的代码是在没有调试信息的情况下编译的。
问题内容: 我的Java代码实例捕获了,但是当我尝试登录StackTrace(基本上最终调用)时,我得到的是: 还有其他人遇到吗?我尝试谷歌搜索“ java空指针空堆栈跟踪”,但没有遇到这样的事情。 问题答案: 你可能正在使用HotSpot JVM(最初由Sun Microsystems,后来由Oracle收购,又是OpenJDK的一部分),它执行了很多优化。要获取堆栈跟踪,需要将选项传递给JVM
问题内容: 我最近注意到,有一些Java库(JDK,joda time,iText)在编译时没有部分/全部调试信息。要么缺少局部变量信息,要么缺少局部变量信息和行号。 有什么理由吗?我意识到这会使编译后的代码更大,但我认为这不是一个特别大的考虑因素。还是仅使用默认的编译选项进行构建? 谢谢。 问题答案: 默认的编译选项不包含调试信息,您必须明确告诉编译器包括调试信息。大多数人忽略它的原因有几个:
问题内容: 在Java中,为什么以下代码行不起作用? 如果我将其更改为 起初,我以为您可能没有接口列表,但是我可以创建一个很好的接口。 有想法吗? 问题答案: 泛型类型比较古怪。 表示或任何子类型,但仅表示。如果您想要一个子类型,您需要 我怀疑你可以用 无法执行此操作的原因是,您可以使用对引用的引用,并且必须谨慎使用额外的间接级别。 使用泛型,您可以有两个间接级别,这会给您带来问题,因此它们更容易
问题内容: 我知道每次键入字符串文字时,字符串池中都会引用相同的String对象。 但是,为什么String API不包含,所以我可以使用引用? 至少,这将节省编译时间,因为编译器将知道引用现有的String,而不必检查是否已创建它以进行重用,对吗?我个人认为,字符串文字(尤其是很小的文字)在许多情况下是一种“代码异味”。 那么是否没有String.Empty背后的宏伟设计原因,还是语言创建者根本
问题内容: 在Java中,有和接口。两者都属于Java的标准框架,并提供了一种访问元素的分类方法。 但是,据我了解没有。你可以用来对列表进行排序。 知道为什么要这样设计吗? 问题答案: 列表迭代器首先确保你以列表的内部顺序(也称为插入顺序)获取列表的元素。更具体地说,它是按照插入元素的顺序或操作列表的方式进行的。排序可以看作是对数据结构的一种操作,有几种方法可以对列表进行排序。 我将按照自己的见解
问题内容: 在GO教程中,我们有这张幻灯片:Goroutines 运行此代码会产生预期的结果(“ world”和“ hello”交替写入屏幕5次)。 但是,如果我们注释掉了(因此是导入行)并再次运行该程序, 则只剩下 “ hello”被写入屏幕五次了。 有什么重要的意义可以使goroutine免于死亡? 问题答案: 如果将其删除,则不会给goroutine运行的机会。goroutine调度程序不是