作为一个对整个支持和错误修复环境相对较新的人和一个年轻的程序员,我从来没有遇到过只发生在Websphere环境中但不会发生在localhost测试环境中的错误,直到今天。当我第一次收到这个错误报告时,我很困惑为什么我无法在localhost测试环境中重现它。我决定尝试使用Websphere测试环境来查看会发生什么,并且我成功地重现了该错误。问题是我无法进行更改并构建到Websphere测试环境中。我只能对当地环境进行更改。鉴于这种障碍,有哪些方法可以解决这些类型的错误。或者甚至有任何方法论?关于如何解决这类问题的任何建议或帮助?
答案 0 :(得分:8)
答案 1 :(得分:3)
简而言之,该方法是隔离和理解环境之间的差异以及可能导致问题的一个或多个。
检查您的本地版本。确保它与Test和Prod相同的版本(代码和数据库)。如果是,那么可能会影响您所看到的问题的环境差异是什么? (多核,负载平衡,操作系统版本,第3库版本)。不要在调试器中本地运行,确保运行发布版本(如果这是Test和Prod上的内容),甚至可以进行本地部署而不是从源代码构建。
检查是否是可能导致问题的特定数据。如果可以,请将数据库的副本从Test复制回Local,然后查看是否可以重新解决问题。
与其他开发者核实。看看他们是否可以复制。在他们的环境中的问题。请咨询您的质量保证人员,了解可能导致此类问题的原因(通常情况下他们会看到“类似”问题并可能给您一些线索)。
此时,如果没有任何帮助,我通常会深入禅宗,试着去理解我所缺少的东西。但是,必须有所不同,你必须找到它。
答案 2 :(得分:2)
科学方法总是适用 - 首先检查你的假设。如果系统不同,问题可能在于某种隐式默认值不同,或某些函数的不同实现。
在所有调试过程中,本地化是关键。你必须首先隔离问题的区域。如果您的操作系统,补丁,库和主要软件本身完全相同,则可能是系统设置(套接字,文件描述符等限制)。如果你知道你有足够的inode,空间和内存,那么这不是资源问题。如果计算机几乎没有响应您的交互式刺激,您的负载太高,或者您有一些失控的过程。记住每个过程需要运行的内容,并确保它们得到了所需的内容。
它也可以代码只是无法处理生产系统的负载。锁定机制是生产与开发/测试系统问题的一个非常普遍的原因,仅仅是因为您无法生成足够的生产中免费获得的测试用例。
日志记录很容易被忽略,但我也想在代码中添加大量调试值,以便更容易地进行调试。我甚至无法计算一些环境变量,路径或破坏的符号链接破坏了我的一天多少次,只是意识到如果我在运行时查看变量的值而不仅仅是查看静态代码,这将是一个微不足道的修复。
如果所有其他方法都失败了,ltrace
和strace
是真正了解幕后内容的最佳方式。它们不容易阅读,但是一旦你习惯了某些系统调用的返回值,你会得到一个非常强大的调试工具。