ISSでOSをシミュレーションしていると、デッドロックしているのを見逃してしまい、ディスクを食い潰していることがある。 これを防ぐために、指定したサイズのファイルサイズを越えると、シミュレーションをストップする機能を追加した。
使ったのは、stdio.hのfgetpos()だ。これにより、FILE*の現在のオフセット量を取得できる。1ステップシミュレーションをする度に、このオフセットの値を確認していき、指定したファイルサイズを越えると、そのタイミングでシミュレーションをストップする。
// Check Max Size if (stdout != GetDbgFilePointer()) { int64_t cur_file_size = GetCurrentDbgFileSize (); if ((GetMaxDebugFileSize () != 0) && (cur_file_size > GetMaxDebugFileSize ())) { SetStopSim (true); DebugPrint ("<Achieved Log File size = %d[byte]>\n", GetCurrentDbgFileSize ()); } }
ちなみに、このオプション--max_sizeはMB単位で指定するようにしており、指定しなかった場合はデフォルトの0、そして0の場合は比較操作をしないようにしている。 Google Flagsでの指定だ。
DEFINE_int64 (max_size, 0, "Max size of log file [MB]");