Tag: callstack

计算方法调用堆栈大小以检查StackOverflowException

今天早上我回答了一个与StackoverflowException相关的问题。 该人询问何时发生Stackoverflowexception 查看此链接在C#,C ++和Java中导致堆栈溢出的最简单方法 所以我的问题是,有没有任何方法可以在程序中动态计算方法调用堆栈大小,然后在调用方法之前应用检查,该方法检查方法调用堆栈是否有空间来容纳它,以防止StackOverflowException。 因为我是一个java人,我正在寻找java,但也寻找与概念相关的解释,没有任何编程语言的限制。

为什么我可以在Java中“伪造”exception的堆栈跟踪?

如果我运行以下测试,它将失败: public class CrazyExceptions { private Exception exception; @Before public void setUp(){ exception = new Exception(); } @Test public void stackTraceMentionsTheLocationWhereTheExceptionWasThrown(){ String thisMethod = new Exception().getStackTrace()[0].getMethodName(); try { throw exception; } catch(Exception e) { assertEquals(thisMethod, e.getStackTrace()[0].getMethodName()); } } } 出现以下错误: Expected :stackTraceMentionsTheLocationWhereTheExceptionWasThrown Actual :setUp 堆栈跟踪只是平躺着。 抛出exception时,为什么不重写堆栈跟踪? 我不是Java开发者,也许我在这里遗漏了一些东西。

获取Java堆栈跟踪中涉及的对象

我可以使用Thread.currentThread().getStackTrace()来检索当前的堆栈Thread.currentThread().getStackTrace()但这只给出了调用中涉及的类。 是否可以检索调用跟踪中涉及的对象实例? 也许某种类型的库允许我从堆中检索对象? 我有一个问题,需要我追溯到一个Spring bean,间接创建了我正在请求堆栈跟踪的对象。 更新如果在Java中没有内置工具,我正在搜索可以在运行时为我执行此操作的可嵌入库。

如何获取正在运行的应用程序的Java Call Stack

我正在研究非常庞大的基于Java web的应用程序。 由于在开发过程中没有进行适当的日志记录,因此我很难设置断点并调试应用程序,因为我不知道执行顺序。 在执行某些操作后,是否有任何机制可以获取正在运行的java应用程序的完整调用堆栈。 我在网上搜索了很长时间,但无法找到具体的解决方案。 如果有什么东西,请建议我。 谢谢

java是否有任何机制让VM自己跟踪方法调用,而不使用javaagent等?

我想动态地构建调用图,从任意方法调用开始,或者从运行的JVM本身中使用新线程开始构建调用图。 (这个软件将成为负载测试另一个消耗调用图的软件的测试工具) 我知道有一些SPI接口,但看起来你需要用它们运行-javaagent标志。 我想直接在VM本身访问它。 理想情况下,我想获得每个方法调用的入口和出口的回调,该方法调用的参数以及该方法中的时间。 显然在单个线程内。 我知道AOP可能会这样做,但我只是想知道JDK中是否有工具可以让我捕获它。

如何在Java中获取调用类的名称?

我想在这个问题上提供一些帮助, 例: public class A { private void foo() { //Who Invoked me } } public class B extends A { } public class C extends A { } public class D { C.foo(); } 这基本上就是这种情况。 我的问题是方法foo()如何知道谁在调用它? 编辑 :基本上我试图做一个数据库层,在类AI中将创建一个将生成SQL语句的方法。 通过获取调用类的所有公共属性的值来动态生成此类语句。