Generate a Java stacktrace at any point in the program
Possible Duplicate:
Get current stack trace in Java
我有一个方法将消息保存到文件。 从我的主程序的许多不同部分调用此方法。 有没有办法按需生成堆栈跟踪,即使没有触发Exception?
例如,我希望这样的事情......
1 2 3 4 5
| void saveMsg (String Msg )
{
if (a ==b ) Print Out Where This Method Was Called From [ like stackTrace in exception ]
else saveMsgToFile (filePath,Msg );
} |
我知道Java可以在Exception中堆栈跟踪,但是如果没有发生Exception,如何生成堆栈跟踪?
只需执行Thread.dumpStack(),这会将堆栈跟踪打印到控制台。没有必要搞乱创建异常并捕获它。
您可以生成自己的Exception并捕获结果...
将此代码放在您想要输出堆栈跟踪的任何位置。
这样做的好处是e.printStackTrace();方法可以很好地为您处理输出,假设您想要输出到控制台。通过触发Exception,您还可以为原因指定文本字符串(在此示例中为"Tracing only"),因此您可以使用有意义的标题(例如"Tracing the saveMsg method")轻松自定义跟踪输出。
或者你可以通过调用这个来获得堆栈跟踪...
1
| Thread. currentThread(). getStackTrace(); |
但是,这会留下一个StackTraceElement的数组,你必须循环到输出。在我看来,生成和捕获自己的Exception更容易,更清晰,就像在第一个选项中一样。
-
您不需要抛出异常来打印stacktrace。 只需new Exception().printStackTrace()就可以了。
不幸的是,只有
1
| Thread. currentThread(). getStackTrace(); |
对你的任务有用。问题是所有前面提到的方法都会在堆栈顶部打印你的方法(saveMsg),但这通常是不可取的。相反,您必须跳过getStackTrace()方法返回的第一个元素。