1
A
回答
4
Stack introspection会给你方法的调用者或者最好的方法的一些细节,对于确切的方法签名你将不得不使用反射。
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
官方文件说:
返回表示该线程堆栈转储 堆栈跟踪元件的阵列。如果此线程尚未启动或终止,此方法将返回一个零长度数组。如果返回的数组长度为非零长度 ,则数组的第一个元素表示堆栈的顶部 ,这是 序列中最新的方法调用。数组的最后一个元素表示 堆栈的底部,这是序列中最近最少的方法调用。
这样从StackTrace你可以得到方法名称,文件名,linenumber。
有关完整的方法签名,你将不得不使用反射
2
您可以使用Java Reflection和StackTraceElement。
StackTraceElement[] elements = new Throwable().getStackTrace();
String calleeMethod = elements[0].getMethodName();
String callerMethodName = elements[1].getMethodName();
String callerClassName = elements[1].getClassName();
System.out.println("CallerClassName=" + callerClassName + " , Caller method name: " + callerMethodName);
System.out.println("Callee method name: " + calleeMethod);
+2
我认为你的文章是没有任何帮助我的问题 –
相关问题
- 1. 通用堆栈方法
- 2. 通过调用堆栈传递数据,无需修改方法
- 3. 通过堆栈
- 4. 通过调用堆栈绘制图表
- 5. Java堆栈反省
- 6. 通过Eclipse查看内置Android应用的调用堆栈?
- 7. 通过函数名查找调用堆栈中的父环境
- 8. Android中的方法调用堆栈
- 9. 的Java方法调用堆栈复制
- 10. 显示不带方法名称的调用堆栈
- 11. 的jQuery()方法调用的最大堆栈大小超过
- 12. 调用堆栈
- 13. 可能通过反射来获取调用方法类的实例,或调用堆栈中的任何方法?
- 14. 堆栈跟踪方法名称编辑
- 15. 绕过堆栈大小的方法
- 16. IronPython通过名称调用方法
- 17. 堆栈列一行通过
- 18. 堆栈溢出调用堆栈#timememoryfunctionlocation 10.0000143728
- 19. 通用方法签名
- 20. 调用保留调用堆栈的私有方法
- 21. 在Visual Studio 2010中可视化调用方法调用堆栈
- 22. 调用堆栈显示匿名函数
- 23. IntelliJ:通过签名找到方法
- 24. JavaScript调用堆栈
- 25. erlang调用堆栈
- 26. jQuery调用堆栈?
- 27. POSIX调用堆栈内存分配
- 28. 超过最大调用堆栈
- 29. 最大调用堆栈超过
- 30. Nodejs RangeError超过最大调用堆栈
是反射是在寻找签名确实是有用的,但我的要求是,我必须找到调用堆栈内省获得方法的签名,我没有源代码,我怎么会知道一些重载哪种方法(比如方法)被调用使用调用堆栈和反射而不使用源代码我确实有字节代码? –
我不认为你可以,afaik只有方法名称和(如果可用调试-g)行号出现在堆栈跟踪中。如果它的一次性解决方案尝试反编译类和检查行号 – JIV