因此,我们使用Netbeans 6.9.1
,将我们的代码推送到SVN服务器(dev),然后运行连接到DEV计算机上MySQL的本地Web服务器(Tomcat)。 我们可以在调试模式下运行并逐步执行代码。
但是,我们然后获取WAR
文件,将其推送到生产机器(在生产数据库中)。 该机器与开发人员完全分开。
但是我们遇到了持续的问题。 当我们对所有列进行三重检查时,诸如Hibernate中的null id
之类的事情,等等。
我们需要的是一种将调试器附加到PRODUCTION
用户并逐步执行代码的方法。
我们有什么选择?
感谢您的任何建议。
编辑
我想发布更多信息。 感谢那些提供建议的人。
首先,我们的生产服务器托管3个应用程序(以及prod数据库)。 我们遇到最多问题的应用只有一个用户,数据几乎与开发人员的数据相同。 我们在JDBC中遇到事务问题,无法找到问题的根源。
如果您确实想将调试器附加到正在运行的生产服务器上,则Java完全可以做到这一点。 首先,使用以下命令运行服务器/ JVM:
-Xrunjdwp:transport=dt_socket,address=8778,server=y,suspend=n
现在,您可以使用Eclipse或IntelliJ IDEA中的 prd_server:8788
地址连接IDE。
但是,有一些陷阱:
您需要在指定端口上具有对生产服务器的TCP / IP访问。 可能会涉及一些防火墙/ SSH隧道。
默认情况下,调试器在遇到断点时可能会挂起所有线程。 确保仅暂停当前服务器,否则将冻结整个服务器。
...是的,远程调试很危险 ,尤其是在生产环境中。
处于调试模式/侦听调试连接的JVM可能会稍微慢一些(虽然没有看到)。
如果您愿意远程调试生产环境而不是提防它会减慢您的应用程序。 但是,如果您不能在开发服务器上复制问题,请按照以下步骤远程调试应用程序:-
让我们知道您正在使用哪个生产服务器。
您可以 将Tomcat配置为允许远程调试器连接 ,但是我不建议这样做,因为在连接调试器时 ,这会大大减慢JVM的执行速度,而且我相信,只要遇到断点,所有线程的执行都会暂停。
使用开发服务器上的生产数据,添加更多日志记录等来重新创建问题要好得多。
在尝试调试Prod之前,请将您的Prod数据向下迁移到Dev env并在那里进行调试。 如果您有针对非Prod环境中Prod数据的安全策略,请根据需要清理数据。
如果问题与数据有关,则应尽快解决。