How to debug a native Java crash on Linux?

I've seen this question and this article on how to debug a native Java crash. The article is with respect to Windows. What are the equivalent debugging aids on Linux? Note: All I have is this crash log from a user in the field. I do not have access to the machine on which the crash occurred. Update : I am pretty sure the crash is due to JNI code we have. I never meant to imply that it

如何调试Linux上的本地Java崩溃?

我已经看到了这个问题和这篇关于如何调试本地Java崩溃的文章。 这篇文章是关于Windows的。 Linux上有什么等效的调试帮助? 注意:我拥有的是来自该字段中用户的这个崩溃日志。 我无法访问发生崩溃的机器。 更新 :我很确定崩溃是由于我们有JNI代码。 我从来不想暗示它是JVM本身的错误。 根据请求,这里是崩溃转储(或者适用于30K stackoverflow限制): # # An unexpected error has been detected by Java Runtime E

Why does this method call fail? (Generics & wildcards)

I am getting the below error: 'call(ContainsMonitor)' cannot invoke 'call(? extends webscout.Monitor)' in 'WebScoutCallable' Monitor.java WebScoutCallable<? extends Monitor> handler; public setCallable(WebScoutCallable<? extends Monitor> callable) { this.handler = callable; } WebScoutCallable.java public interface WebScoutCallable<T extends Monitor> { public void

为什么此方法调用失败? (泛型和通配符)

我收到以下错误: 'call(ContainsMonitor)' cannot invoke 'call(? extends webscout.Monitor)' in 'WebScoutCallable' Monitor.java WebScoutCallable<? extends Monitor> handler; public setCallable(WebScoutCallable<? extends Monitor> callable) { this.handler = callable; } WebScoutCallable.java public interface WebScoutCallable<T extends Monitor> { public void call(T calle

What can I do against floating point notations Errors?

This question already has an answer here: Why Are Floating Point Numbers Inaccurate? 3 answers Why not use Double or Float to represent currency? 14 answers You can use double for more precision (or BigDecimal if you expect to work with very big numbers). String aa = "1000009.00"; double bb = Double.parseDouble(aa); bb=Math.round(bb*100); System.out.printf("%.2f", bb); // it prints only

我能做些什么来对付浮点符号错误?

这个问题在这里已经有了答案: 为什么浮点数不准确? 3个答案 为什么不使用Double或Float来表示货币? 14个答案 您可以使用double来获得更高的精度(如果您希望使用非常大的数字,则可以使用BigDecimal )。 String aa = "1000009.00"; double bb = Double.parseDouble(aa); bb=Math.round(bb*100); System.out.printf("%.2f", bb); // it prints only two digits after the decimal point 产量 100000900.00 您可以

Calculating very exact numbers

This question already has an answer here: Is floating point math broken? 23 answers Why not use Double or Float to represent currency? 14 answers

计算非常确切的数字

这个问题在这里已经有了答案: 浮点数学是否被破坏? 23个答案 为什么不使用Double或Float来表示货币? 14个答案

Using doubles in multiplication (java)

This question already has an answer here: Why not use Double or Float to represent currency? 14 answers Since you are dealing with values in a shopping cart and double 's are only precise up to a point, I would recommend that you use BigDecimal 's instead because they provide an exact representation of a number. The imprecision of doubles is what's causing your incorrect console

在乘法中使用双精度(java)

这个问题在这里已经有了答案: 为什么不使用Double或Float来表示货币? 14个答案 由于您正在处理购物车中的值,并且double的值只能精确到某一点,所以我建议您使用BigDecimal的值,因为它们提供了一个数字的精确表示。 双打的不精确性是导致你的控制台输出不正确的原因。 import java.math.BigDecimal; BigDecimal dynamicRope = new BigDecimal("4"); // example value of 4 BigDecimal dynamicRopeCost = new BigDecima

Rounding a Bill Total in Java

This question already has an answer here: Why not use Double or Float to represent currency? 14 answers Seeing result.setText("Tip Amount : " + " $ " + Double.toString(tip_cal)); , I'm guessing you're getting a lot of nines in your output. Doubles can't store cents exactly, so the math will be off, but if you're not a financial institution and just deali

以Java总计账单

这个问题在这里已经有了答案: 为什么不使用Double或Float来表示货币? 14个答案 查看result.setText("Tip Amount : " + " $ " + Double.toString(tip_cal)); ,我猜你在输出中获得了很多9。 双打不能存储美分,所以数学将关闭,但如果你不是一个金融机构,只处理<10,000美元的交易,做 result.setText(String.format("Tip Amount :$%.2f", tip_cal)); 还有一件事: decimalFormat.

why is java turning integers into something less

This question already has an answer here: Why not use Double or Float to represent currency? 14 answers Why do I see a double variable initialized to some value like 21.4 as 21.399999618530273? 14 answers You're doing your calculations using double. Please take a look on this http://floating-point-gui.de/ Also http://www.mkyong.com/java/how-do-calculate-monetary-values-in-java-dou

为什么java将整数转化为更少的东西

这个问题在这里已经有了答案: 为什么不使用Double或Float来表示货币? 14个答案 为什么我会看到一个初始化为像21.4那样的值的双变量21.399999618530273? 14个答案 你正在使用double进行计算。 请看看这个http://floating-point-gui.de/ 另外http://www.mkyong.com/java/how-do-calculate-monetary-values-in-java-double-vs-bigdecimal/ 我承认,我没有阅读你的代码,但我99%确定你在使用二进制数据存储时遇到

Using double to temporarily store currency values?

This question already has an answer here: Why not use Double or Float to represent currency? 14 answers No, it still causes problems, even if you don't perform any calculations. The problem is that the value you store might not be exactly representable as a double , so even if you just store it and read it back, you might not get back what you stored. If you store 0.1 in a double , fo

使用double来临时存储货币值?

这个问题在这里已经有了答案: 为什么不使用Double或Float来表示货币? 14个答案 不,它仍然会导致问题,即使您不执行任何计算。 问题在于,您存储的值可能无法完全表示为double ,因此即使您只是将其存储并读回,也可能无法取回所存储的值。 例如,如果你将0.1存储在double ,你会发现它实际上并不存储0.1,因为你不能完全用二进制表示0.1。 不。双倍从来不是用于存储货币值的正确类型。 双精度值是浮点值,也就是说

number formatting

Possible Duplicate: Why not use Double or Float to represent currency? I'm learning Java so please bear with me for such a simple question. When given a calculation to calculate interest i have this code inputted: public double calculateTotal(double rate, int n) { amount = amount * Math.pow((1+rate), (n/12)); return amount; } This returns the answers I'm looking for bu

数字格式

可能重复: 为什么不使用Double或Float来表示货币? 我正在学习Java,因此请耐心等待这样一个简单的问题。 当给出一个计算来计算利息时,我输入了这个代码: public double calculateTotal(double rate, int n) { amount = amount * Math.pow((1+rate), (n/12)); return amount; } 这会返回我正在查找的答案,但会一直添加0.000000000001到最后。 我将如何解决这个问题? 一位朋友建议了一种叫数字格式的

Addition in Java

This question already has an answer here: Why not use Double or Float to represent currency? 14 answers You can do exact floating point arithmetic in Java using BigDecimal . Here is an example: BigDecimal a = new BigDecimal("0.0040"); BigDecimal b = new BigDecimal("0.0005"); BigDecimal sum = a.add(b); Also note that BigDecimal and BigInteger (the same for integers) are immutable. It

Java中的添加

这个问题在这里已经有了答案: 为什么不使用Double或Float来表示货币? 14个答案 您可以使用BigDecimal在Java中执行精确的浮点运算。 这里是一个例子: BigDecimal a = new BigDecimal("0.0040"); BigDecimal b = new BigDecimal("0.0005"); BigDecimal sum = a.add(b); 还要注意BigDecimal和BigInteger (整数相同)是不可变的。 这是因为浮点数,他们失去了精度,并导致你所看到的问题。 而是使用BigDecimal来获得