草庐IT

Debugging

全部标签

java - Java 的 DebuggerStepThrough 等价物

.NET有几个方便的注释,指示调试器单步执行/越过某些方法。我想知道是否有适用于Java平台的等效项。例如:@DebuggerStepThroughpublicvoidfoo(){..}会导致调试器在单步执行时不在foo中停止。我尝试了什么在类文件中使用SYNTHETIcflags。这会导致javac禁止用户代码调用此类方法。自定义属性。没有JDIAPI检索注释。在thisforum上也提到了.附言。我正在实现一个调试器并控制发出的字节码 最佳答案 据我所知,不是股票特征,不是。否则,我还可以推荐您查看Eclipse调试器的“步进过

java - 在控制台输出中使用 println 正确排序运行时异常

VMJava控制台输出的一个常见问题是System.out和System.err通常不会正确同步,这可能是因为它们位于不同的线程上。这会导致混合输出,如下所示:调试输出与运行时异常堆栈跟踪混合在一起[8,1,3,5,9,13,15,17,19]Exceptioninthread"main"java.lang.ArrayIndexOutOfBoundsException:9scanningxAnswer:1xValue:1total:1[1,1,0,0,0,0,0,0,0]atcra.common.Group_jsc.listSubsetSum(Group_jsc.java:29)sca

java - 如何在不访问源代码的情况下调试 Java 应用程序?

我需要调试一个没有源代码的Java应用程序。它在Jetty服务器上本地运行。使用JD-GUI反编译工作正常。通过套接字连接或共享内存附加JDB也能正常工作。我失败的地方是将各个部分拼接在一起。我主要尝试了带有JD-Eclipse插件和远程调试的Eclipse。我找不到将调试器成功附加到正在运行的进程的方法。一切似乎都假设我至少有部分应用程序可以作为项目中的源代码使用,但我没有。它是一个相当大的应用程序(200+MiB的JAR文件和500+MiB的其他东西)所以尝试从所有反编译的类构建一个项目并让它运行不是一个选项,除非它很容易自动化。我真正需要的是能够将调试器附加到正在运行的进程、查看

java - 无法获取线程转储?知道为什么我的应用程序会阻塞吗?

我有一个基本的Java服务器应用程序,它有100个工作线程,可以对URL执行简单的HEAD请求。我为此使用HttpClient4.x。运行几分钟后,我的程序就卡住了几分钟,我不明白为什么。查看visualvmmonitor报告的屏幕截图。你可以看到它是扁平的。在此期间,我无法获得良好的线程转储,而可视化虚拟机只是卡住,直到它被解锁。有没有人知道我可以做些什么来尝试开始调试这个人?可视化虚拟机:http://tinypic.com/view.php?pic=2i915bs&s=7这是我在卡住时尝试获取jstack转储时的输出:jstack-F4325AttachingtoprocessI

java - 识别未被垃圾收集的对象的更好方法?

一言以蔽之我有一个程序随着时间的推移逐渐使用越来越多的内存。我正在使用jmap和jhat来尝试诊断它,但还不够准确。背景该程序是一个长期运行的服务器,由hbase数据存储支持,为其他一些东西提供节俭服务。然而,在运行几天后,它最终会达到分配的堆限制,并且几乎所有时间都花在垃圾收集上来回Swing。似乎在某处保存了大量数据的引用到目前为止我做了什么在摆弄jstat和jconsole之后,我最终使用运行进程的jmap进行堆转储,并通过jhat运行它,简单的数字加起来没有接近内存利用率jmap-F-dump:live,format=b,file=heap.dump12765jmap-F-du

java - 追踪 int[] 的分配

当通过JMX在JVisualVM中查看我的远程应用程序时,我看到空闲时内存使用呈锯齿状:获取堆转储并使用JVisualVM对其进行分析,我看到大块内存位于几个没有引用的大int[]数组中,通过比较堆转储,我可以看到它似乎是这些正在占用内存并由GC定期回收。我很想追踪这些,因为这激起了我的兴趣,因为我自己的代码从来没有故意分配任何int[]数组。我确实使用了很多像netty这样的库,所以罪魁祸首可能在其他地方。我确实有其他服务器具有大致相同的框架组合,但在那里看不到这个锯齿。我如何才能发现谁在分配它们? 最佳答案 进行堆转储并找出存放

java - 如何调试 JNI/C 库?

我们这里有一个系统,它使用JavaJNI调用C库中的函数。在Solaris上运行的一切。我在某个地方遇到了字符串编码问题。用C编写的函数返回一个阿拉伯字符,但JNI方法接收一个具有另一种编码的字符串。我已经尝试设置$NLS_LANG和用于编码的vm参数,但没有任何效果。所以我需要能够同时调试C代码和JavaJNI。调试它的最佳方法是什么? 最佳答案 dbx调试器(SunStudio的一部分)可以附加到JVM进程,让您在Java代码和native代码之间单步执行。该功能的代号为“jdbx”,尽管它都是dbx的一部分。它没有得到大力推广

java - 调试器只在断点处停止,不会在 "step over"

我正在尝试调试从源代码构建的代码。它从Tanuki的包装器开始。我正在IntelliJidea中调试,但我不确定这是问题所在。调试器正确地停止在我放置断点的所有行,但从未如此F8,“跳过”不起作用。非常烦人,因为我必须在每个地方放置断点:)我做错了什么吗? 最佳答案 您如何构建项目?如果您使用Ant或其他工具构建它,请确保在启用调试信息的情况下执行编译(对于Antjavac任务,debug=true)。构建期间的混淆和字节码检测也会影响调试的可能性。如果你运行在一些非标准的JVM下,也可能会出现这样的问题。执行远程调试时,确保使用I

java - 无法在 IntelliJ 中调试 Web 服务代码

我有一个已安装的窗口服务。我有在IntelliJ中打开的应用程序的源代码。我按如下方式配置了IntelliJ我检查了服务的PID和它正在使用的端口。在IntelliJ中运行远程配置时出现以下错误4:09:18PMErrorrunningRemote:Unabletoopendebuggerport:java.net.ConnectException"Connectionrefused:connect"有人可以阐明如何在IntelliJ中调试窗口服务吗?这是一个工作计划应用程序。installService.cmd如下setHOME_DIR=%~dp0setSERVICE="Servic

java - 执行程序时打印源代码流

有没有办法在程序执行时打印每一行源代码,而不必在每一行之后插入System.out.println? 最佳答案 使用调试器。调试器提供了许多有用的工具来逐步执行您的程序。检查您的IDE,它可能有一个。 关于java-执行程序时打印源代码流,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6815713/