多くの友人がプログラムのデバッグを経験していると思いますが、プログラムのデバッグは、多くの場合、注意を払うだけでなく、忍耐も必要であり、焦らないようにしてください。しかし、問題が発見され、うまく解決されたとき、それは人々に非常に刺激的な喜びを与えます。ここでは、著者がプログラムのデバッグで使用する原則、ツール、および方法の概要を示します。ここで説明する必要があるのは、いくつかの原則的なことはさまざまな言語で似ていますが、特定のツールや特定のデバッグ方法に関して言えば、これは Web 開発にのみ関係するということです。
一般原則:
1. 問題の原因を見つけます:
プログラムに問題があるため、プログラムをデバッグする必要があります。デバッグの最初の目標は、原因を見つけることです。一般的なデバッグ方法、除去方法: 複雑なシステム全体に直面した場合、現時点では問題がどこにあるのかわからないことがよくあります。まず、問題に関係のない場所を除去し、徐々にデバッグの範囲を減らします。 。モジュール独立方式:ほとんどのプログラムはモジュール構造になっており、疑わしいモジュールを個別に取り出し、該当する動作データをシミュレーションして問題がないかどうかを確認します。比較方法: プログラムまたはシステムが特定のプラットフォームに基づいている場合、まずこのプラットフォームに基づいている他のプログラムまたはシステムを調べて、プラットフォームの問題なのか、このプログラムの問題なのかを調べることができます。この方法は多くの場合使用されます。未熟なプラットフォームの問題を排除します。比較方法: 実装するプログラムには、対応するオープンソース モジュールがすでに存在する場合があります。これらのプログラムのソース コードを見つけて、自分のプログラムと比較することで、時間を節約できるだけでなく、他のプログラムの優秀さから学ぶこともできます。
2. 問題箇所:
問題の原因はさまざまです。おそらく、現時点では、それがどのような種類の問題であり、それが何に関連しているのかを知る必要があります。このステップを達成するために、一般的な開発環境には多くの実用的なツールが用意されており、これらのツールを利用すると、プログラムの入力と出力をステップごとに表示し、各ステップの入力と出力に基づいて問題を特定できます。
コードを読んで問題を見つけることができる非常に強力な人々がいます。しかし、多くの問題はデバッガ自身の過失によって引き起こされ、固定的な考え方が形成されているため、この方法で問題を発見することはほとんど不可能です。
3.問題を解決する
こうした問題は無視されたり、自分でよく考えていなかったりすることが多いため、問題の原因と対応するコード行を見つけて解決するのは比較的簡単なことが多いです。ただし、これは常に当てはまるわけではなく、たとえば、Web サイトへの訪問者数の増加などの外部環境が原因である場合もあります。現時点では、問題を解決するのがより困難になる可能性があります。このような問題を解決するには、プログラムだけではなく、システムのアーキテクチャからスタートし、あらゆる知識を統合し、総合的に検討する必要があります。
Web 開発で一般的に使用されるデバッグ ツール
ことわざにあるように、労働者が石を研ぎたい場合は、まず道具を研ぐ必要があります。プログラムのデバッグには、外部ツールも使用する必要があります。 Web プログラムの開発で一般的に使用されるいくつかのツールを次に示します:
xdebug、xhprof: PHP パフォーマンス デバッグ ツール。これらはすべて PHP の拡張機能であり、簡単にインストールして構成できます。これら 2 つのツールは主に、プログラムの内部実行ステータスと呼び出し関数を簡潔な方法で示します。これにより、プログラムがリソースを過剰に消費している箇所と、最適化が必要な箇所を一目で確認できます。 ちなみに、xdebug で生成されたプロファイル ファイルは、通常、winCacheGrid を使用して表示されます。
firephp、firbug: 前者は主にPHPのデバッグツールですが、後者はリクエストを表示するだけでなく、jsやcssのデバッグもできます。
HttpWatchはie下で利用可能です。データの詳細な分析を行う必要がある場合は、パケット キャプチャ ツールを使用できます。
phpでよく使われるデバッグ関数: error_report、var_dump、print_r、var_export
mysql、apache/nginx の一般的なデバッグ スキル: ログ ファイルの分析も非常に重要です。 Linux でログ ファイルを表示するための一般的なコマンド: cat、more、less、grep、awk、sed
一般的なデバッグスキルと方法
それでは、私がデバッグしたプログラムをもとに、具体的なデバッグ方法やテクニックを紹介していきます。
例 1: これは PHP で開発されたゲーム エンジンです。その主な機能は、ダブルサーバーのプレーヤーの移動位置、ステータス、パス、スキル、その他の機能コントロールを提供することです。プログラム全体は XML ファイルを通じて結果を保存します。ある日突然、2 人のユーザーが競合し、返された XML は通常の構造に準拠していませんでした。返された結果から判断すると、プレイヤーの移動位置に異常があり、一部のステップが欠落していることが判明したため、ゲームの AI を調べてみましたが、異常は見つかりませんでした。最後に、入力されたプレーヤー データが出力され、その後、プログラムの処理ロジックと組み合わせると、2 人のユーザーが同じプレーヤーを持っていることがわかり、両者の間で混乱が生じます。処理中は 2 人のプレイヤー。理由を見つけたら、選手のロゴをチームと選手の共同決定に変更するだけです。
例2: プログラムは立ち上げられたばかりで、熱心な友人の中にはプログラムに関するストレステストを実施したいと考えている人もいます。ある時、大規模な静的リソースに対する突然の 200,000 リクエストが直接ハードディスクのクラッシュを引き起こしました。この場合、何が起こったのかを確認するにはアクセス ログを確認する必要があります。そうしないと、誰かがあなたを攻撃したときに、その理由を見つけることができなくなります。もちろん、このような攻撃に対しては、静的リソースを CDN に直接配置する必要があります。さらに、アクセスするユーザーの数が増えると、システムへの負荷が増大し、応答が徐々に遅くなるということも考慮する必要があります。以前は 0.000 ミリ秒しかかかっていなかったプログラムの処理に 0.0 秒かかるようになりました。このとき、プログラムの同時実行性の設計は非常に重要です。データ異常が発生する可能性があります。
例3: 外部ソフトウェア使用時に異常が発生する: 例えば、memcachedを使用している場合、特定のマシンが起動しない、または使用できない場合。現時点では、nginx は通常、memcache を使用する一部のリクエストに対して 502 を返します。これは少しナンセンスだと思いませんか? memcahce の php 拡張機能を書き直すことを検討してみてはいかがでしょうか。