Tag: 调试

Java UnknownFormatConversionException

下面的代码抛出了这个错误,我不知道为什么。 将String.format输出到str变量显然存在问题,但我不知道它有什么问题。 Exception in thread “main” java.util.UnknownFormatConversionException: Conversion = ‘i’ at java.util.Formatter$FormatSpecifier.conversion(Unknown Source) at java.util.Formatter$FormatSpecifier.(Unknown Source) at java.util.Formatter.parse(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.lang.String.format(Unknown Source) at Donor.toString(Donor.java:41) at Donor.main(Donor.java:65) – import java.util.Scanner; public class Donor { public String name; public int age; public double donation; Donor() { //Initialized to these values for […]

如何从Java中的生产代码中删除调试语句

编译器是否可以从生产代码中删除用于调试目的的语句(例如日志记录)? 需要以某种方式标记调试语句,可能使用注释。 设置属性(debug = true)很容易并在每个调试语句中检查它,但这会降低性能。 如果编译器只是简单地使调试语句消失,那将是很好的。

当并非所有使用的堆都可以从线程访问时查找Java内存泄漏

我正在研究一个基于Java的大系统中潜在的内存泄漏(或至少是内存浪费)。 JVM的最大堆大小为5 GB,并且2-3GB堆使用量是应用程序的预期基线。 (可能有更高的峰值) 在我正在调查的重载场景中,堆被填满了。 使用“Eclipse MemoryAnalyzer Tool”分析堆转储显示(毫不奇怪)堆已完全用完。 MAT显示了2个潜在的泄漏候选者,两者大致保留了2.5GB:java.lang.Thread和来自系统的域对象,该对象在系统中的事务处理期间广泛使用。 但是,从Thread实例可以访问所有这些域对象(不足为奇)。 毕竟,这些线程正在处理事务。 因此,归因于java.lang.Thread的2.5 GB几乎完全是由那些域对象引起的。 这里不足为奇。 列出所有java.lang.Thread实例的对象树并总结所有线程的保留堆会导致2.5 GB的保留堆。 如果无法从java.lang.Thread的实例访问堆,那么我应该在哪里寻找填充堆所需的其他2.5 GB? – 终结器队列中没有任何内容 – 没有大量未到达的对象待处理GC 我认为另一种提出这个问题的方法是:“如何找到所有从java.lang.Thread实例无法访问的对象?可能是OQL查询?”,另一个问题是:“那里有什么样的对象无法从java.lang.Thread的实例到达终结器队列中的对象和待处理GC的未引用对象吗?“

Prime生成数字查找器不能产生正确的输出

我正在解决这个问题: 考虑30:1,2,3,5,6,10,15,30的除数。 可以看出,对于每个除数d为30,d + 30 / d是素数。 找出所有正整数n的总和不超过100 000 000,这样对于n的每个除数d,d + n / d是素数。 我确信我有它,但是唉,它显然给了我错误的答案( 12094504411074 )。 我很确定我对Eratosthenes的筛子正在工作(但可能没有),所以我认为问题出在我的算法中。 它似乎得到正确的答案n = 30 ( 1+2+6+10+22+30 = 71 – 这是正确的吗?),但随着数字变大,它显然停止工作。 这是我的Java代码: import java.util.HashSet; public class Generators { static HashSet hSet = new HashSet(); public static void main(String[] args) { // TODO Auto-generated method stub int n = 100000000; […]

无法在IntelliJ中打开调试器端口

无法在intellij中打开调试器端口。 端口号9009与在应用程序的配置文件中设置的端口号匹配。 -XX:MaxPermSize=192m -client -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=${com.sun.aas.instanceRoot}/logs/jvm.log -Djava.endorsed.dirs=${com.sun.aas.installRoot}/modules/endorsed${path.separator}${com.sun.aas.installRoot}/lib/endorsed -Djava.security.policy=${com.sun.aas.instanceRoot}/config/server.policy -Djava.security.auth.login.config=${com.sun.aas.instanceRoot}/config/login.conf -Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as -Djavax.net.ssl.keyStore=${com.sun.aas.instanceRoot}/config/keystore.jks -Djavax.net.ssl.trustStore=${com.sun.aas.instanceRoot}/config/cacerts.jks -Djava.ext.dirs=${com.sun.aas.javaRoot}/lib/ext${path.separator}${com.sun.aas.javaRoot}/jre/lib/ext${path.separator}${com.sun.aas.instanceRoot}/lib/ext -Djdbc.drivers=org.apache.derby.jdbc.ClientDriver -DANTLR_USE_DIRECT_CLASS_LOADING=true -Dcom.sun.enterprise.config.config_environment_factory_class=com.sun.enterprise.config.serverbeans.AppserverConfigEnvironmentFactory -Dosgi.shell.telnet.port=4766 -Dosgi.shell.telnet.maxconn=1 -Dosgi.shell.telnet.ip=127.0.0.1 -Dfelix.fileinstall.dir=${com.sun.aas.installRoot}/modules/autostart/ -Dfelix.fileinstall.poll=5000 -Dfelix.fileinstall.debug=1 -Dfelix.fileinstall.bundles.new.start=true -Dorg.glassfish.web.rfc2109_cookie_names_enforced=false -XX:NewRatio=2 -Xmx2048m IntelliJ中的配置: 当我尝试为此应用程序启用远程调试时,会出现以下错误:

当进入类实例化时,eclipse调试器转到本机代码

我最近升级到helios,现在每次我进入类的构造函数(例如Cat myCat = new Cat(); )时,eclipse调试器将堆栈显示为 : 要获得实际的构造函数代码,我必须多次走出来这很烦人。 每个类都会发生这种情况,尽管有堆栈,但我从未在控制台中看到任何错误消息。 我如何解决这个问题,直接进入我class级的构造函数? 这仅在第一次使用该类时发生,甚至对于与当前src文件位于同一src文件中的类也是如此。

在Intellij-Idea调试器中转储一个巨大的数组

在Idea中是否有一种方法可以将大量非常多的内容转储到剪贴板中? 数组上的“复制值”不返回任何内容。

使用eclipse调试OpenJDK源代码

在我的项目中,我想使用eclipse调试OpenJDK版本8的C / C ++源代码。 为此,我做了以下事情: 使用此自述 –with-debug-level=slowdebug使用–with-debug-level=slowdebug编译OpenJDK8。 将源码makefile项目导入eclipse 创建了一个eclipse运行配置,对已编译的OpenJDK的java.exe执行gdb并定位示例java程序。 在这个配置中我附加了JDK源代码目录路径,这样eclipse就可以将调试符号转换为源代码行并查看它们(显然) 通过这种方法,我可以通过java.c等文件的代码进行调试。 我的问题是,我仍然无法通过本机代码进行调试。 例如java.lang.System.currentTimeMillis() 。 对我来说,看起来这些库没有包含在eclipse gdb-run中。 我试图手动运行gdb,它仍然无法通过该代码部分进行调试。 有没有人有同样的行为,或曾经尝试调试JDK源代码? 我想我在这里遗漏了一些东西……也许我的方法对于这个任务来说是不正确的? 很高兴听到有关如何正确调试JDK源代码的任何提议。 先谢谢你。

Java线程转储摘要工具

我有时不得不从Tomcat服务器查看线程转储。 但是,这是一个非常缓慢的过程,因为我的应用程序使用具有几百个线程的线程池。 我看到的大多数线程转储包括许multithreading的相同堆栈跟踪,因为它们在空闲等待工作。 是否有任何工具可以解析线程转储,只显示唯一的堆栈跟踪以及每个状态中线程数的计数? 这将允许我快速忽略在公共位置等待工作的数十或数百个线程。 我已经尝试过Thread Dump Analyzer,但这并没有对常见的堆栈跟踪进行任何总结。

如何在Netbeans中调试Java Web应用程序?

我已经在Netbeans中调试了Java桌面应用程序,但还没有调试Java Web应用程序。 我尝试以同样的方式调试它,但它不起作用。 我创建了一个index.html网页。 该页面上有一个“表单”。 用户提交表单后,请求转到servlet(比如serv1)。 servlet已被调用,但它显示出意想不到的结果。 因此,为了调试它,我在servlet类(serv1)中放置了一个断点,然后调试应用程序。 但是当我提交表格时,控制并没有停在断点处。 我确信正在调用设置断点的行。 有什么我想念的吗? ================== EDITED =============================== ==================== 是的,我已经在调试模式下启动了服务器。 我正在使用Apache Tomcat 6.0.20