因此,我们使用Netbeans 6.9.1
,将我们的代码推送到SVN服务器(dev)并运行连接到DEV机器上的MySQL的本地Web服务器(Tomcat)。我们可以在调试模式下运行并逐步执行代码。
然而,我们接着我们的WAR
文件,推送到生产机器(在生产数据库上)。这台机器完全独立于开发。
但是我们遇到了不断的问题。当我们对所有列进行三重检查等时,Hibernate中的null id
等事情
我们需要的是一种将调试器附加到PRODUCTION
用户并逐步执行代码的方法。
我们有什么选择?
感谢您的任何建议。
修改
我想发布更多信息。感谢那些提出建议的人。
首先,我们的生产服务器托管3个应用程序(以及prod db)。我们遇到问题最多的应用程序只有一个用户,数据几乎与我们在开发中的数据相同。我们遇到了JDBC的事务问题,无法找到它们的来源。
答案 0 :(得分:1)
如果您确实想将调试器附加到正在运行的生产服务器,那么Java完全有能力执行此操作。首先,使用以下命令运行服务器/ JVM:
-Xrunjdwp:transport=dt_socket,address=8778,server=y,suspend=n
现在,您可以使用Eclipse或IntelliJ IDEA中的prd_server:8788
地址附加IDE。
但是很少有问题:
您需要对指定端口上的生产服务器进行TCP / IP访问。可能会涉及一些防火墙/ SSH隧道。
默认情况下,调试器可能会在遇到断点时挂起所有线程。确保只挂起当前的一个,否则你将冻结整个服务器。
...是的,远程调试危险,特别是在生产方面。
调试模式下的JVM /侦听调试连接可能会稍微慢一些(虽然没看过)。
答案 1 :(得分:0)
你可以 configure Tomcat to allow remote debugger connections,但我不建议这样做,因为你会在连接调试器时显着降低JVM的执行速度,而且我相信每当遇到一个断点时所有线程的执行都将暂停。
使用开发服务器上的生产数据重新创建问题,添加更多日志记录等等更好。
答案 2 :(得分:0)
在尝试调试Prod之前,请将Prod数据迁移到Dev env并在那里进行调试。如果您对非Prod env中的Prod数据有安全策略,请根据需要清理数据。
如果问题与数据相关,则应该相当快地点击它。
答案 3 :(得分:0)
如果您愿意远程调试生产环境而不是提防,则会降低您的应用速度。但是如果您无法在开发服务器上复制问题,请按照远程调试应用程序的步骤进行操作: -
告诉我们您正在使用的生产服务器。