到目前为止,我已经了解了分别使用jstack和jmap生成线程转储和堆转储。但是,jstack线程转储仅包含描述每个线程堆栈的文本。使用JavaVisualVM打开堆转储(.hprof文件)仅显示堆中分配的对象。我真正想要的是能够看到堆栈,切换到特定的堆栈帧,并观察局部变量。这种事后调试通常可以使用WinDbg、gdb和核心文件(对于nativeC++程序)等工具完成。我想知道Java中是否存在这样的“核心”文件(它将允许我在非实时环境中进行调试)? 最佳答案 Java可以。如果您使用的是IBMVM,请使用com.ibm.jvm.D
我需要查看2个死锁线程的堆栈以分析情况。JVM现在是实时的,数据也在那里,但我需要某种工具来从进程中提取它。我只关心String类型的堆栈中的6个变量。非常感谢任何想法。JVM版本6_35,它是一个linux,启用了JMX,但我没有profiler/在其上配置的调试器连接。很难重现。 最佳答案 我发现了一个使用堆转储查看器的小技巧(在本例中是YourKit,但其他人也可以)。基本上你枚举Thread类的所有实例,然后你通过名称找到你想要的线程并打开它。堆栈变量标记为,如下所示:并不是所有的变量都在这里,但是所有作为参数传递给方法的变
我正在尝试让Tomcat(目前作为服务在Windows2003机器上运行)在OutOfMemoryError上转储堆。(Tomcat正在运行Hudson,它在我构建的尾端报告堆空间问题。手动运行构建不会产生此类错误。Hudson人员需要堆转储才能开始。)按照其他地方的说明,我已经告诉Apache服务监视器配置它用来运行Tomcat的JVM,以便在遇到OutOfMemoryError时通过将以下内容添加到JVM选项来转储堆:-XX:+HeapDumpOnOutOfMemoryError然后我再次运行构建。果然,它报告存在堆错误。我扫描整个磁盘寻找默认的java_pid123.hprof文
我经常发现自己只想打印(使用每个对象的隐式toString())Java方法的每个参数。有没有一种快速的方法可以做到这一点? 最佳答案 Java编程语言没有执行此操作的结构。但是,您可以使用AOP(面向方面的编程)包之一来完成它,例如AspectJ.特别是这个线程可能是如何实现这一点的一个很好的起点:http://dev.eclipse.org/mhonarc/lists/aspectj-users/msg09939.html然而,我个人的看法是,大多数时候AOP是一种可怕的矫枉过正。更新:哦,here's一种使用SpringA
我们在生产环境中安装了JRE,但没有安装JDK。JRE和OS的版本如下。[me@mymachine~]$java-versionjavaversion"1.6.0_45"Java(TM)SERuntimeEnvironment(build1.6.0_45-b06)JavaHotSpot(TM)64-BitServerVM(build20.45-b01,mixedmode)[me@mymachine~]$uname-aLinuxmymachine.mydomain.com3.10.35-43.137.amzn1.x86_64#1SMPWedApr209:36:59UTC2014x86_6
我运行JVisualVM(WindowsXP、SunJava1.6.0.13、32位客户端VM)来监视远程应用程序(Linux、SunJava1.6.0.07、64位服务器VM)。在启动实际的远程应用程序之前,我使用所有访问策略在远程计算机上启动jstatd:grantcodebase"file:${java.home}/../lib/tools.jar"{permissionjava.security.AllPermission;};然后我使用命令行启动实际的应用程序java-Dcom.sun.management.jmxremote.authenticate=false-Dcom.
如何在不使用类HotSpotDiagnosticMXBean的情况下从我的应用程序中创建堆转储。由于java/rt.jar的访问限制,我无法使用对HotSpotDiagnosticMXBean的依赖性来编译它。我知道如何解决eclipse.compiler错误,但如何为我的构建修复它?除了以编程方式创建堆转储之外,还有其他方法吗?此解决方案不起作用,因为它依赖于HotSpotDiagnosticMXBean:HotSpot-dependentHeapDump 最佳答案 好吧,看来你可以通过使用反射绕过限制:packagelab.he
我一直在ubuntu上使用带有cgi的lighttpd。我遇到了一个“500-内部服务器错误”案例,我想对其进行调试。当我的二进制文件崩溃时,有没有办法让lighttpd/cgi转储核心?我遇到了thispage,它有一个用于启用核心转储的字段,但在lighthtpd.conf中包含server.core-files="enable"似乎不起作用。有什么想法吗?谢谢。附言下面是我用来生成core的测试程序:intmain(){char*html="\n"\""\"Thisistitle\n"\"\n"\"Helloworld\n"\"\n"\"";html[1]='r';std::co
我创建了一个将现有树对象转换为字符串的函数。字符串格式为parent(child1)(child2(childOfChild2))程序正确输出了字符串,做了一些其他的工作,但是在Segmentationfault(coredumped)这是函数(getTree(this->root)输出整棵树):templatestringTree::getTree(constNode&node){if(node.isLeaf()){returnto_string(node.value);}vector>results;//eachelementrepresentsasubtreeconnectedt
当使用g++编译时,-fdump-class-hierarchy以(或多或少)人类可读的格式导出程序的虚表。但是,生成的文件只包含有关vtable的信息,不有关类布局本身的信息。我想获得我所有程序类布局的综合列表。clang提供了-cc1-fdump-record-layouts参数来实现这一点。可以使用-d1reportAllClassLayout调用MS编译器。是否有任何g++开关可以执行此操作? 最佳答案 如果程序编译时带有调试信息,您可以使用pahole从调试信息中转储struct和vtable布局:g++-ggdb3-cp