问题描述
如何通过eclipse跟踪堆栈? 在我的代码中,我正在尝试上传文件,当我在应用程序中执行文件上传操作时,它只是挂起而没有错误消息。 我已经尝试过调试,但它没有多大帮助。
1楼
假设您正在从Eclipse运行应用程序,但是在像Glassfish或Tomcat这样的Java EE容器内,在异常对象上调用printStackTrace()方法(当被捕获时)将在Eclipse的控制台窗口中显示堆栈跟踪。 在您的情况下,您首先需要知道是否正在抛出异常。 我不建议在运行时创建一个Exception对象,只是为了从中推断出堆栈跟踪。
当然,这在编写生产质量代码时不是一个好习惯,您应该考虑使用log4j,jul或slf4j等日志框架来跟踪应用程序行为。
如果push推进,则启用servlet容器的调试(这在容器之间有所不同),这样除了应用程序之外,您还可以跟踪容器本身的行为。
2楼
- 在服务器上,在JDK bin文件夹中以与启动Glassfish相同的用户启动“jvisualvm”。
- 双击“Local”下的相应条目,附加到Glassfish进程。
- 在“线程”面板上,单击“线程转储”按钮。
- 将堆栈跟踪复制到剪贴板。
- 在Eclipse中,将堆栈跟踪粘贴到“控制台”面板中的“Java堆栈跟踪控制台视图”中。
3楼
我建议逐步使用eclipse调试器找出它挂起的位置。 当您单步执行时,这将自动为您提供堆栈跟踪。
我发现“步入”(F5)功能最有用,这可以让你递归地下载到函数中来探索正在发生的事情。
您可以在文件上传代码的开头设置断点,以便您可以在大致正确的位置开始单步执行。 在我的Eclipse版本中,堆栈跟踪显示在相应线程下方左上角的“调试”窗格中。