2015年5月20日水曜日

//**********↓このコメントを消すと何故か動かなくなる!絶対消すな!↓*********

以下は実際に遭遇したトラブル案件

症状:
 コメント行を消すとプログラムが正常に動作しなくなる

環境:
 言語はC
 IDEは存在せずエディタを使用
 組み込み用マイコンのコンパイラを用いてコマンドラインからビル

原因:
 コメントに2バイト文字(日本語)を使用したため、コンパイラのバグでコメント行の改行記号が無視された

 ・エディタ上はこういう記述
   //**********↓このコメントを消すと何故か動かなくなる!絶対消すな!↓*********
        //※※ほげほげ関数※※
        ret = hogefunc(hoge1, hoge2);

 ・コンパイラの理解
   //**********↓このコメントを消すと何故か動かなくなる!絶対消すな!↓*********
        //※※ほげほげ関数※ 蝦ret = hogefunc(hoge1, hoge2);
 (※も蝦も実際には別の文字だが失念)

 蝦は※の2バイト目と改行記号\nが合体してしまった無意味な2バイト文字
  ・※の1バイト目が単体で有意な1バイト文字として解釈された
  ・※の2バイト目+改行文字(\n)が有意な2バイト文字(蝦)として解釈された

 コメント行の次の行で呼んでいるhogefunc()にバグがあり、この関数が呼ばれると正常動作しなかった
 コメント行に巻き込まれたことによってhogefunc()が呼ばれなくなり、表面上正常動作していた
 (実際は設計上の動作ではない/たまたまhogefunc()が重要度の低い処理であったので表面上わからなかっただけ)


備考:
 コンパイラのバグと設計のバグが重なって原因をわかりにくくした
 デバッガが使えない環境だったので泥沼になった

0 件のコメント:

コメントを投稿