Pebble Coding

プログラマーの作業メモ

C++ Debug TIPS ステータス遷移

ステータス変化を追う時のデバッグ手法の1つを紹介します。 以下言語はC++です。

enum {
    kStatusInitial,
    kStatusDownloading,
    kStatusDone,
    ...
};

int m_status;

上記のようなステータスを取る変数があり、ステータスの種類が大量にあり、 それを変更する箇所も大量にある場合、その遷移の履歴をデバッグ表示すると、 ステータス遷移が視覚化され、状況を把握しやすくなります。

m_status = kStatusDownloading;

このような文を全て以下のように書き換えます。

setStatus( kStatusDownloading );

さらに以下のような実装を追加します。

void setStatus( int status ){
   m_status = status;
   m_v_status.push_back( status );
}
std::vector<int> m_v_status;
void dumpStatus( void ){
    std::vector<int>::iterator it;
    for( it = m_v_status.begin(); it != m_v_status.end(); ++it ){
        printf( "status[%d]\n", (*it) );
    }
    m_v_status.clear();
}

変化を確認したいところで、dumpStatus()を呼び出します。