Tag: 堆栈跟踪

如何在java程序中禁用堆栈跟踪生成?

我想禁用在抛出exception时生成的堆栈跟踪。 我用过, Runtime.getRuntime().traceInstructions(false); Runtime.getRuntime().traceMethodCalls(false); 但我仍然可以看到跟踪生成。 你怎么能这样做? 此外,我需要检测是否有人正在调试我的课程。 我想禁用所有exception跟踪。 我不能使用混淆,因为我的产品是一个将用于开发的SDK。 我还提供了一个Runtime,当人们想要部署使用我的SDK构建的应用程序时使用它。 我的要求是任何使用我的Runtime jar的人都不应该能够调试编写的代码……或者至少我会通过避免从我的运行时jar生成堆栈跟踪来使调试变得困难。 我找到的一种方法是所有来自我的运行时jar的exception,我只是捕获它们并在exception对象上设置一个空的StackTraceElement数组并重新抛出它… 为何如此要求? 假设你使用我的SDK开发一个应用程序。(SDK jar不能与你的应用程序捆绑在一起..我已经限制了它,那就是最终:) !!)现在要在你的客户端机器上运行你的应用程序,你(或客户端)需要安装客户端计算机上的运行时并运行您的应用程序。 现在,如果您的客户使用我的运行时jar子开始开发自己的应用程序,该怎么办 这对我的生意构成威胁….这就是为什么这个可怕的要求。 为什么禁用堆栈跟踪? 通过禁用堆栈跟踪生成或方法调用跟踪生成我想用我的Runtime jar开发代码很困难,这就是为什么我以这种方式开始我的问题…建议一些其他解决方案来实现这样的要求……

Java线程:解释正在运行的JVM的线程状态

Java线程始终处于以下十种状态之一: NEW: Just starting up, ie, in process of being initialized. NEW_TRANS: Corresponding transition state (not used, included for completness). IN_NATIVE: Running in native code. IN_NATIVE_TRANS: Corresponding transition state. IN_VM: Running in VM. IN_VM_TRANS: Corresponding transition state. IN_JAVA: Running in Java or in stub code. IN_JAVA_TRANS: Corresponding transition state (not used, included for completness). BLOCKED: […]

如何获取Java分析转储以在mac上创建火焰图?

我想从我的Java应用程序中收集堆栈跟踪,以创建用于分析的CPU Flame Graphs 。 这与此问题非常相似: 如何在每个样本中从分析器获取完整的堆栈转储以用于火焰图? 有2个不同之处: 我使用Java代码,我需要Java堆栈跟踪 我正在使用Mac(这意味着OSX上没有pref和AFAIK dtrace不支持jstack扩展)。 我已经尝试过轻量级java-profiler和Honest profiler ,但它们似乎都不适用于Mac。 我也试过VisualVM ,但我无法让它产生我需要的堆栈跟踪转储。 对我来说,第一个prioirty是从Java堆栈跟踪生成的火焰图,但是拥有本机调用堆栈也很棒,因为它可以让我解决I / O问题(甚至可能生成热/冷火焰图 )。

如何生成堆栈跟踪?

程序中没有单个方法“知道”它在堆栈中的位置。 它所知道的只是它自己的小工作,它就是这样做并且回归。 因此,当抛出exception并打印堆栈跟踪时,这是从哪里来的? 是否隐含地在JVM中的每个应用程序旁边运行一个单独的Thread来监视程序的状态? 或者JVM本身是否拥有此信息,并且exception以某种方式在抛出时从中提取数据? 如果是这种情况之一,是否可以使用一些调用来检索堆栈跟踪(来自监视器线程或JVM) 而不抛出exception?

如何在线程java应用程序中确定运行时的主类?

我想在运行时确定我的应用程序启动的类名,带有main()方法的类名,但我在另一个线程中,我的堆栈跟踪不会一直回到原始类。 我已经搜索了系统属性以及ClassLoader提供的所有内容,并且没有提供任何内容。 这些信息不可用吗? 谢谢。

堆栈跟踪不会以正确的顺序打印到控制台上的其他消息

为什么在控制台屏幕上没有以正确的顺序显示为以下Java程序打印的堆栈跟踪 ? 它与屏幕上的其他消息混在一起。 是否涉及导致它的任何并行性? Java程序: package evm; public class Client { public static void main(String[] args) { EVM evm = new EVM(); try { evm.setCandidates(90); /**An Exception thrown here**/ } catch (CandidatesOutOfLimitsException e) { e.printStackTrace(); //System.out.print(e.getMessage()); } try { evm.voteForCandidate(43); /**An Exception thrown here**/ } catch (BallotUnitOffException e1) { e1.printStackTrace(); //System.out.print(e1.getMessage()); } evm.pressBallotButton(); System.out.println(evm); //other […]

在Javaexception中表示什么?

在Javaexception中表示什么? 例如: BlahBlahException… at java.io.FileInputStream.(FileInputStream.java:20)

清除Java堆栈跟踪中的噪音

我的Java堆栈跟踪有很多我不关心的条目,显示通过代理和Springreflection方法的方法调用以及类似的东西。 它可能很难从我的代码中挑选出实际来自堆栈跟踪的部分。 Ruby on Rails包含一个“堆栈跟踪清理器”,您可以在其中指定堆栈跟踪模式列表以从打印的堆栈跟踪中省略 – 对于Java来说,通用的最佳方法是什么? 如果这在任何地方都有效,那将是最好的,包括Eclipse jUnit runner。

Eclipse – 显示完整的调用堆栈(比如它在调试器中遇到断点)而没有放入断点?

我正在使用一个对我来说不熟悉的遗留Java应用程序,因此有一种方法可以弄清楚它是如何工作的,并且更容易找到事情,我认为可以在执行操作后获得完整的堆栈跟踪,从而能够根据特定的UI动作查看正在使用的类。 我以为这在调试器中是可能的,但它似乎只有在我插入一个断点时才有效,在这种情况下,部分目的是为了让我不必知道被调用的是什么才能插入断点第一(因为这有助于告诉我)。 如果这是一个基本问题我道歉,我已经搜索了这个,但我找不到正确的答案。

从日志文件中提取java堆栈跟踪的工具

是否有任何工具可以提取出现在日志文件中的堆栈跟踪列表,并且可能会计算唯一的堆栈跟踪列表? 编辑 :我会做一些不基于GUI的东西,并在后台运行并提供某种报告。 我从很多环境收集了很多日志,只是想快速浏览一下。