たまに「じゃんぬねっと」が生存確認をする日記

役員より労働者の方が楽だと思う

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  984  : 記事  4  : コメント  38905  : トラックバック  277

ニュース

My Website

初心者向けのサイトです。

C# と VB.NET の入門サイト

最近のできごと

低学歴の IT エンジニア兼管理職です。ずっとリモートワーク中。

駆け出しはブラック企業で低年収でしたが、転職を繰り返して年収は 5 倍以上になりました。

年収はこれ以上増えても幸せ指数は増えませんので、趣味の時間を増やすため早期の半リタイアを考えています。

最高の配偶者、可愛い娘、ハンサムな息子と幸せな日々を送っています。

Sponsored Link1

Sponsored Link2

Archive

書庫

デバッグの基本は「問題の切り分け」です。

あるメソッドに 5 つの処理があったとします。そのメソッドで、予期しない例外 (エラー) が発生したとします。当然これは「バグ」ですから修正 (デバッグ) しなくてはなりません。修正 (デバッグ) するにおいて、まず、何をすべきなのでしょう。

えらそーにわざわざ書くまでもなく、5 つのうち、どの処理が原因なのか特定しますよね? これをせずに全体を眺めていては、時間をムダに費やすことにしかなりません。

特定しないまま他人にすべて丸投げする方がいます。これは、自身のスキルを向上する機会を投げ捨てたことになりますし、時間も非常に勿体無いです。特定すれば、(人に聞くより早く) 自己解決できる問題がゴマンとあるからです。

あるグラウンドで 500 円玉を落としたとします。普通の人ならば、自分が歩いた記憶を頼りに、調べる場所を狭めていくでしょう。記憶を無視して、いつまでも広いグラウンド "全体" から 500 円玉を探す人はいないでしょう。また、他人に「グラウンド全体をとにかく探せ!!」と丸投げする人もいないでしょう。

デバッグするためには、まず問題となっている部分を「切り分け」しましょう。これを特定できるのは他ならぬ、コードを目の前にしている貴方自身です。回線の向こうにいる人が予想して特定するものではありません。

有効なのは、以下のような手段です。(当たり前のことばかりで、恐縮ですが)

  • 一時的に怪しい部分をコメントアウトして結果を見る
  • デバッガがあるのであれば、ステップ実行を行い途中結果を式ウォッチなどで見る
  • デバッガがない場合は、途中結果を何かに出力する
  • 複雑な場合は、ミニマムコード (最小限のコード) で組みなおす
  • 新規でプロジェクトを作成し直して、コードを貼り付ける (構成が原因かどうかの切り分け)

「こんなこと当たり前だ」と思う方が大半なのは知っています。ですが、それをしない方、気付いていない方が、最近増えているようです。今年度の新人教育でも、数人いたくらいですから...

人間は、日常でも無意識のうちに「切り分け」をしています。その日常でトレーニングしているものを、デバッグに使わないのは勿体ないですよね。

投稿日時 : 2006年5月16日 12:42

コメント

# re: デバッグの基本は「問題の切り分け」 2006/05/16 16:09 かるあ
バグが取れないとだんだん視野が狭くなっていって
こういう当たり前のことが出来なくなっていく悪循環って言うのもありますね。

そういう時は1時間ぐらい別の作業をやってから
もう一度同じコードをデバックするとすんなり出来たりします。
あとは人に話していると自分の中で解決してしまったり(w


# re: デバッグの基本は「問題の切り分け」 2006/05/16 16:50 シャノン
> あるメソッドに 5 つの処理があったとします。

一瞬「多すぎだろ」って思ってしまった。
「5つの機能」じゃなくて「5つの処理」ね。

というわけで、直接的なデバッグのやり方じゃないけれど、切り分けが容易なように、強度を高め結合度を下げる設計と、随時のリファクタリングもやっておくといいよね、という話。

# re: デバッグの基本は「問題の切り分け」 2006/05/16 16:57 じゃんぬ
>かるあ さん
よくあるのが、次の日に出社して判明というやつですね。
C++ をやっていた頃には結構遭遇しました。

VB6 や .NET だと遭遇しないんですよね。
バグがあってもすぐ判明しちゃう感じがします。
悩んでいる時間があまりなくて少し寂しいです。
といっても、最近はあまりコードを組んでいませんけど...

>シャノン さん
同感です。
切り分けを容易にするための、"実装の" 切り分けですね。(^^)
保守のことを考えると、リファクタリングはかなり重要です。

# re: デバッグの基本は「問題の切り分け」 2006/05/16 17:01 じゃんぬ
この unibon さんの確認方法も「問題の切り分け」ですよね。
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=30540&forum=7&start=21

ファイルが原因である可能性を潰すために、
もう 1 度同じ容量のファイルを作成して、それを読み込む。

切り分けてますね。

読み込みが原因なのか、書き込みが原因なのかを特定するために、
一時的に書き込みの方をコメントアウトにする。

切り分けてますね。

# re: デバッグの基本は「問題の切り分け」 2006/05/16 17:35 買太郎
切り分けにより、問題の箇所を見つけて
それでなお、何故その例外が出るかわからない時は、例外のメッセージでググル!かな

# re: デバッグの基本は「問題の切り分け」 2006/05/16 17:41 R・田中一郎
基本的なことですが、自分が陥ると、つい忘れがちなことでもあります( ̄▽ ̄;)
こんな時は、この記事を読んで冷静さを取り戻そうと思います。

# re: デバッグの基本は「問題の切り分け」 2006/05/16 20:57 ひろれい
新人の頃、先輩にこう教えられました。

「デバッグは、まず自分を疑うところから始まる」

未だに役に立っている言葉です。

# re: デバッグの基本は「問題の切り分け」 2006/05/17 9:15 Exige
自分の場合ですが、自信満々でコーディングした所が
原因だったってパターンが多い気がします。

自信が無い場所はサンプル作ってみたり、ネットで調べたり
慎重に作業してるんでしょうねw

# re: デバッグの基本は「問題の切り分け」 2006/05/17 13:23 がる
がるです。どこでも同じように考えるんだなぁと。
私がよく下の子にいうのは「まずはBUGと戯れろ」と。
出すも出さぬも自在に操れるようになると、だいたいBUGの位置から基本的な問題まで処理できるです。
で、これで出しにくいのが「特定の競合条件でのみ出るBUG」。thread周りで、とか、しんどいですね(苦笑

でもまぁ、やはり基本は「認識すること」だと思うです。

# re: デバッグの基本は「問題の切り分け」 2006/05/17 17:38 特攻隊長まるるう
質問掲示板で、十分に切り分けされていない質問なのに
すぐに答えを求められ、こちらが切り分けようとすると
『何まわりくどいこと書いてるんだ?』的に扱われるのは困る。。。

往々にして自信満々...( _)_ぺたり
…9割以上の確率で、質問者のコードが悪いです。

# re: デバッグの基本は「問題の切り分け」 2006/05/22 14:35 aketi
先輩で

考えられる原因を列挙して、
バイナリサーチっぽく真ん中から切り分けてる人が
いましたね


# deeywtinrydjefsfxrdyj@hotmal.com 2017/10/20 15:59 anello cartier copia
Yes they do, but its currently disabled for the moment whilst I move servers… Once its back you will be able to update whenever you want
anello cartier copia http://www.braceletluxe.fr/it/

Post Feedback

タイトル
名前
Url:
コメント: