株式会社クリアコード > ククログ

ククログ


デバッグで大事なこと: 必要な部分だけに集中

1ヶ月ほど前、Ubuntu上にSamba 4で構築したActive Directoryドメインに、FreeBSDマシン上のLikewise*1を使ってドメイン参加できるか試してみました。

Windows VistaやWindows XPなどからはSamba 4にドメイン参加できましたが、Likewiseからは失敗しました。Samba 4側に問題がありそうだったので、調べて直してSamba本家へパッチを登録していました。数日前に取り込まれたのでSamba 4 alpha9からはLikewiseを利用したクライアントからもSamba 4にドメイン参加できることでしょう。

バグを直したことについて書いたので、デバッグのことについても少し書きます。デバッグ作業は以下のような流れになります。

  1. 確実に問題を再現できるパターンを見つける
  2. 問題箇所を絞り込む
  3. 問題を修正する
  4. 問題が解決されていることを確認
  5. コミットする or パッチを送る

問題の修正の仕方については言語や分野などによって様々な方法があるので、ここでは取り上げません。ここでは、デバッグ作業の中でも重要な「問題箇所を絞り込む」ことについて書きます。

知らないソフトウェアのデバッグ

クリアコードではフリーソフトウェアを扱うことが多く、また、ソースコードレベルまで立ち入った問題修正やカスタマイズなども行います。もちろん精通しているフリーソフトウェアも多くありますが、すべてのフリーソフトウェアについて精通しているわけではありません。

例えば、Samba 4もすべてを把握していないフリーソフトウェアの1つです。それでも、問題を修正したりカスタマイズしたりすることができるのは、すべてのことを知ろうとせず、必要な部分だけに集中するからです。

デバッグをする場合に重要なことはこの必要な部分だけに集中することです。

クリアコードでは「ソースコードがあれば大丈夫です」と言うことがよくあります。これは、たとえ大きなソフトウェアでも必要な部分だけに集中すればすべてを把握しなくとも問題を解決できることを経験して知っているからです。ソースコードがあれば、たとえドキュメントでは触れられていない問題に遭遇した場合でも、必要な部分に集中して問題を解決することができます。

問題箇所を見つける方法

デバッグをするときに必要な部分はどこでしょうか。それは、問題が発生している箇所です。ここを見つけたら半分位解決したようなものです。

ケースバイケースですが、以下のような流れで問題が発生している箇所を見つけることができます。

  1. ログレベルをあげて、再現パターンを実行
  2. エラーメッセージをWeb検索 (最新版では修正されているかもしれません)
  3. エラーメッセージでソースコードをgrep
  4. ログメッセージを追加し、さらに絞り込む

Sambaのようにネットワーク通信を行うようなソフトウェアであれば、Wiresharkなどでパケットをのぞくのもよいでしょう。ネットワーク通信を行わないようなソフトウェアであれば、デバッガで絞り込む方法もあります。

そのような場合も、ある程度ログメッセージからあたりをつけておいた方が効率よく問題箇所を見つけるとができます。まずログをみることは重要なポイントです。

問題箇所を見つけることができたら、あとは修正するだけです。頑張ってください。

まとめ

効率よくデバッグをするために重要なこと「必要な部分だけに集中する」を紹介しました。

ソフトウェアを開発しているとバグに遭遇することは多くあるでしょう。バグを直すときは、必要な部分がどこかを見失わないようにしてください。必要な部分を見つけられなかったり、間違ってしまうと、なかなかバグにたどり着けません。そういうときは少し時間をあけてからもう一度さがしてみると必要な部分を見つけられることがあります。

バグを見つけたときはレベルアップするチャンスです。ぜひデバッグして直してみてください。

*1 Likewiseはオープンソース版のLikewise Openを使いました。

2009-09-24

«前の記事: milter manager 1.3.1リリース 最新記事 次の記事: インストールするだけでActiveScaffoldのメニューを日本語化»
タグ:
年・日ごとに見る
2008|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|