プログラム内の変数の調査のやり方
プログラムを組んでいると、バクは必ず起こる。自分一人の場合はある程度どこを見ればいいのかが予想は着くのだが、仕事で大きなプログラムを見る場合は、慣れていないと戸惑うことが多いため、私なりのプログラムの変数調査について説明する。
以下の環境を前提にする
- テキストエディタ……サクラエディタ
- 言語……C、C++(他の言語でも手順はほぼ同じ)
(1)ログがある場合、ログのエラーメッセージから調べる変数を特定する。
企業単位で作っているものとなると、大抵「障害ログ」が作られており、障害ログを記載したテキストファイルに書かれてあることが多い。その中には、障害が起こった原因と対象となる行の中身が書かれているので特定できるようになっている。
(2)CTRL+Fを用いて、確認したい変数が含まれる行に行く。
ほとんどのテキストエディタでは、Ctrl+Fで指定した文字列で該当文字が含まれている部分を検索することができる。
(例、kozotai1 ->hensu1の定義を調べたい場合)
memcpy( kozotai1 ->hensu1,hensu2)
なお、構造体やクラス内の変数でない場合は(4)にスキップする。
(3)アロー演算子(->ピリオドがついている場合、構造体、クラス名を探す。
構造体名はCTRL+Fから上検索を利用すると
(例ではPtGetSeatOutで検索)
(構造体名) (変数名)
が出てくるのでそこから探せばよい。
(下のコードの例ではKOZOTAI **hensu1
と出てきており、大文字のKOZOTAIが構造体名となる)
Knasu(
KOZOTAI **hensu1
)
{
//以下、関数の内容のコードが続く
(4)構造体を使用している場合、構造体のあるヘッタファイルを探す。
構造体はヘッタファイルに作成されていることが多いので、
CTRL+Gを押して他のファイルから構造体が書かれている部分を検索する。
※CTRL+GのGREP検索で見つからなかった場合は大抵調べるファイル中にあるので、構造体名をCTRL+Lでを用いて検索すればよい。
(5)使用するデータをダブルクリックする。
GREP検索の結果、検索した文字列が含まれているファイル名を行の中身が表示される。
Ttodef struct tag_(構造体名)と書かれている行で構造体の定義をしているので、その行をダブルクリックすると該当ファイルが開かれる
(6)自分が調べている変数の型を確認する
kozotai->hairetu1
の状況ので調べたい場合は以下のココードの場合は2行目を確認すればよい。
typedef struct tag_KOZOTAI{
char hairetu1[]
int hairetu3[]
} KOZOTAI
○型がint型でもchar型だった場合。
初期化の有無を確認して、次の工程に進む
○型がint型でもchar型だった場合。
ポインタがあることを意識した上で、初期化の有無を確認して次に進む
○大文字で書かれた構造体であった場合
(4)〜(6)の工程をもう一度繰り返す。
○配列(例)Hairetu[10]であった場合
カッコも含まれている場合(例の場合はHairetu[1])→通常の変数として考える
カッコの前の文字列ののみ場合(例の場合Hairetu)→ポインタ型の変数として考える。
配列の文字だけの場合は、先頭アドレスを示すものでとなるため。
7該当する変数のエラー直前に行っている処理の行を確認する。
変数に何を代入されているかを調べて、不適切なものでないことを確認する。
変数を代入していた場合など、さらに調査が必要になった場合は、代入元の変数をまた1から調査する。
また、調査をしている状況において、インスペクタを使って変数の中の数字を表示できるようにすると調査は割と楽になる。