Java 对调试web应用时NetBeans调试器的行为感到困惑

Java 对调试web应用时NetBeans调试器的行为感到困惑,java,debugging,tomcat,netbeans,Java,Debugging,Tomcat,Netbeans,我正在NetBeans中开发一个javaeeweb应用程序。我试图调试应用程序的行为,但我看到的行为令人困惑 我正在通过Tomcat中的NetBeans运行应用程序。在NetBeans中,我从项目树的根目录中选择“Debug”,然后可以向我编写的应用程序发送一个请求。断点被命中,我从应用程序中得到唯一的结果 但是,以后每次我尝试向应用程序发送请求时,都会得到完全相同的错误结果(即使我清除了Chrome上的缓存),并且Netbeans IDE不会在任何定义的断点处停止。这是意料之中的事吗?Serv

我正在NetBeans中开发一个javaeeweb应用程序。我试图调试应用程序的行为,但我看到的行为令人困惑

我正在通过Tomcat中的NetBeans运行应用程序。在NetBeans中,我从项目树的根目录中选择“Debug”,然后可以向我编写的应用程序发送一个请求。断点被命中,我从应用程序中得到唯一的结果

但是,以后每次我尝试向应用程序发送请求时,都会得到完全相同的错误结果(即使我清除了Chrome上的缓存),并且Netbeans IDE不会在任何定义的断点处停止。这是意料之中的事吗?Servlet运行一次调试器后是否会在内存中损坏?我是否需要在每次调试应用程序时停止并重新启动/重新连接NetBeans调试器?使用调试器时是否有什么地方我做错了?这是否表明我在Servlet中编写的代码存在问题

谢谢


杰森·马佐塔(Jason Mazzotta)

rjsang关于缓存的观点可能是有效的,值得研究。 然而,也可能是因为某些东西比您预期的更早断裂,导致您甚至从未到达断裂点

我建议:

  • 研究如何使用调试日志语句(使用良好的日志框架,如带有SLF4j的Log4J)自由地散布代码
  • 在问题上抛出更多断点-从您希望从请求中命中的第一行开始。如果可能的话,价格会更高/更早
  • 跟踪Tomcat日志(catalina.out)——您可能会发现那里发生了灾难性的事情

  • 祝你好运。

    rjsang关于缓存的观点可能是有效的,值得研究。 然而,也可能是因为某些东西比您预期的更早断裂,导致您甚至从未到达断裂点

    我建议:

  • 研究如何使用调试日志语句(使用良好的日志框架,如带有SLF4j的Log4J)自由地散布代码
  • 在问题上抛出更多断点-从您希望从请求中命中的第一行开始。如果可能的话,价格会更高/更早
  • 跟踪Tomcat日志(catalina.out)——您可能会发现那里发生了灾难性的事情

  • 祝你好运。

    如果你的第二个请求没有命中任何断点,那么你应该假设它没有命中任何代码,并且其他一些缓存正在你的请求和servlet之间运行。这可能在浏览器、servlet筛选器、容器或断点之前被命中的某些代码中。如果第二个请求未命中任何断点,则应假定它未命中任何代码,并且其他缓存正在请求和servlet之间运行。这可能是在您的浏览器、servlet过滤器、容器或断点之前被命中的某些代码中。谢谢你们的回答。我确实在doGet方法的开头放了一个断点,并发现了一个bug。这并不能完全解释我所看到的行为,但是修复了这个bug似乎已经解决了这个问题。现在,每次发送请求时,我都会命中断点并获得唯一的结果。现在开始找出其他错误。谢谢你们的回答。我确实在doGet方法的开头放了一个断点,并发现了一个bug。这并不能完全解释我所看到的行为,但是修复了这个bug似乎已经解决了这个问题。现在,每次发送请求时,我都会命中断点并获得唯一的结果。现在开始搜寻其他的虫子。