传统hpc和非传统hpc
![](https://i-blog.csdnimg.cn/blog_migrate/ab556d926d055d17348159b15d4f5a2c.png)
首先说我是一个自学成才的开发人员。 对于许多受过正式教育的程序员/开发人员/工程师,我做错了很多事情。
我是排名第二的黑客:
![](https://i-blog.csdnimg.cn/blog_migrate/0f9da846cfc96e8a063e7519778f4fa1.png)
因此,虽然我没有上过代码学校或没有获得IT学位,但是我已经在一起黑客攻击了20年左右,并且我对此非常擅长。 如果我现在必须构建一些东西,通常应该使用PHP / MySQL。
我不了解Ruby或Python。 我听说它们更易于使用,并且具有更详细的错误报告功能,但是由于超过80%的网站都由PHP驱动,因此我精通它可能不是一件坏事。
PHP的反帮助错误
使每个人都疯狂的一件事是PHP的习惯,它死了,对发生了什么错误完全不知情。 死亡白屏(WSOD)。
![](https://i-blog.csdnimg.cn/blog_migrate/9de423088b675efcd165c56dae63fc2f.png)
作为企业家,我聘请了许多开发人员并与之合作。 尽管其中大多数人受过专业教育,但是当他们遇到标准调试方法无法解决的WSOD时,他们仍然可能会绊倒。
PHP给我们带来的另一个有趣的失败是永远有用的500错误。 这通常是语法错误,看起来像这样:
![](https://i-blog.csdnimg.cn/blog_migrate/0da4892bcb3d73f689ed2fd10afdb22b.png)
无论哪种情况,PHP的错误处理传统上都是很差的。 尽管在大多数情况下,使用Python下载程序包提供的调试工具已经足够用了,但是在调试PHP时,您确实必须发挥创造力。
建立故障排除方法
我不会花太多时间来说明显而易见的内容。 如果您是一名程序员,那么您已经熟悉标准和已建立的调试方法:
在屏幕上显示错误和错误日志
如果未将服务器配置为显示错误(在任何生产环境中都应该显示),则可以通过在脚本顶部放置以下内容来打开它们:
error_reporting(E_ALL);
ini_set(‘display_errors’, TRUE);
ini_set(‘display_startup_errors’, TRUE);
在许多情况下,您会在屏幕上看到错误。
这并不总是有效。
![](https://i-blog.csdnimg.cn/blog_migrate/c2fdf794b2ba1b66f5ead80aaaf0da71.png)
当屏幕上没有错误时,您应该尝试检查错误日志。
根据托管环境的设置,您是否可以访问错误日志。 出于本文的目的,我将假设您无权访问日志,或者日志中包含的信息不能帮助您解决问题。
调试工具
我听到了有关Xdebug和现代IDE(例如PhpStorm)的好消息 。
Xdebug是PHP的扩展,可帮助进行调试和开发。 它升级了PHP的var_dump()函数,添加了通知,警告,错误和异常的堆栈跟踪,它基本上完成了PHP本应做的许多事情。
PhpStorm是一个集成开发环境( IDE ),可通过在键入时验证代码并编写(希望)没有错误的简洁代码来提供帮助。 遇到问题时,它会提供零配置的Visual Debugger,并与Xdebug和Zend Debugger一起使用。
这样的工具可以帮助您快速捕获语法错误,并在运行时获取更详细的错误。 但是,如果这些工具不能解决问题或者您无权使用它们怎么办? 是时候考虑一些非传统的调试方法了。
Sostre回声/退出方法
好的,所以也许我实际上没有发明这个……而且没人把它称为“ Sostre回声/退出方法”,但是我已经向足够的开发人员展示了如何做到这一点,我相信这应该是一件事情。
当您陷入困境而又不知道如何查找和解决错误时,这可以帮助您找出问题所在。
它是运行时调试的一种变体,但更简单。 当您有一个包含数百行的脚本并且不知道错误发生在哪里时,这可以帮助您确定导致问题的行。
如果您陷于死亡的白屏,只需从文档顶部开始并输入以下内容:
echo __LINE__;
exit();
然后再次运行您的脚本。
如果在回显/退出位于页面顶部时仍获得WSOD,则可以向下滚动到下一个建议:注释掉代码块
如果(而不是WSOD)看到行号,那么您将学到两件事。 1)您可能没有处理语法错误,并且2)问题发生在回显行号以下的某个地方。
从这里,您可以仅将这两行代码移到脚本的下方,运行它,然后重复进行直到再次获得WSOD。 到那时,您知道该错误位于回显/退出代码之上。
我知道这看起来很简单,但是当开发人员不知道发生了什么时,您不会相信这节省了多少小时。 如果您确切地知道脚本中的哪行是导致失败的原因,则解决问题变得容易得多。
注释掉代码块
同样,这似乎很简单,但这并不总是您想到的第一件事。
当问题是由MySQL连接断开,所需的文件丢失或类似情况引起的时,echo / exit方法效果很好,但是语法错误仍可能返回500错误。
发生这种情况时,只需开始注释掉整个代码块。
首先,在脚本顶部回显一个“ hello world”,并在必要时注释掉脚本的其余部分。 您需要浏览器显示任何内容,以便您可以找出脚本即将死去的地方。
如果您可以使用“ hello world”,那么请逐步取消注释代码块,直到WSOD回来。
在其他托管环境中尝试脚本
我已经看到开发人员团队花费数小时试图弄清楚为什么代码无法正常工作,只是为了意识到问题是服务器端的配置或限制导致了代码失败。
如果一切正常,并且您的代码看不到任何错误,请尝试在其他服务器上运行脚本。 在这样的情况下,在某个地方保留一个免费或低成本的共享帐户进行测试。
哪些调试方法适合您?
如果您有一些技巧要分享,请将其发布在下面的评论中,我将在满分之内将它们添加到文章中!
大声喊叫CloudApp ,这是我用来拍摄/注释超赞屏幕截图的应用程序。 我曾经使用过Snip ,但是最近已停止使用,并且CloudApp是一个不错的升级。 当您需要澄清说明,使用屏幕截图改善调试或质量检查过程或进行超级简单的屏幕录制时,我强烈建议您使用它。
传统hpc和非传统hpc