Ant*_*ton 5 java incompatibility java-7 java-8
有一段复杂的代码可以执行许多复杂的数学运算.
当它由maven在jdk 1.7上构建和测试时,它会通过所有测试.使用jdk 1.8时失败.
试图在调试器中找到计算出错的地方似乎几乎没有希望.
我有什么选择?有没有一种工具可以在我的代码中扫描jdk 1.7和1.8之间的不兼容性?
我是最好的选择,在两个单独的调试器中运行代码,看看差异在哪里?
编辑:
@PhilippClaßen到目前为止,这是最可能的原因.我希望有一种自动检查方法.
@dkatzel这段代码不是我写的,评论很差,并且做了对我来说是"木头"的科学计算.
@Mike Samuel我认为这种方法没有比并行运行两个调试器更好的了.
谢谢大家的帮助.似乎两个调试器是最好的方法.
编辑2 原始代码的作者依赖于哈希映射排序.那就是问题所在.
留意不确定性的来源.
特别是依赖于像HashMaps这样的集合中元素排序的代码是危险的,因为排序是未指定的并且取决于JVM.
我在每次JVM升级中都看到过这样的(错误的)代码运气很好,并且一旦JVM实现发生变化就会立即崩溃.
添加日志记录语句来记录每个中间结果。你可以使用类似的东西
static void dumpDoubleWithLineNumber(double d) {
StackTraceElement[] stack = Thread.currentThread().getStackTrace();
// Thread.getStackTrace() and this method are elements 0 and 1
StackTraceElement caller = stack[2];
System.err.println(
caller.toString()
+ " : " + d
+ " / " + Long.toString(Double.toLongBits(d), 16));
}
Run Code Online (Sandbox Code Playgroud)
然后在 Java 7 下运行一次,在 Java 8 下运行一次,并对结果进行比较。
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |