2018年4月17日

[筆記] SGCheck: An Experimental Stack and Global Array Overrun Detector Table of Contents

SGCheck 是 valgrind 底下的 tool 之一,簡單來說這東西就是用來彌補  memcheck 的不足之處。memcheck 專攻的問題是 heap memory 中的 illegal access (invalid read & write) 以及 memory leak。相對的,SGCheck 則是對 stack memory 做檢測,特別是當使用 array 或 pointer 時確實無法完全避免不會有 illegal access。因此這兩者算是相輔相成的,只是比較常聽 & 用到的是 memcheck (也是memory bug 最常出現的地方)。
SGCheck 從 valgrind 的官方手冊上其實會發現這依然是個實驗性質的工具 (也就是還在開發中不穩定啦!) 要使用時所指定的 tool name 也不是直接用 --tool=sgcheck 而是 --tool=exp-sgcheck (manual 第一段就有寫了)。manual 上也直接講明了會有 false negative (該抓得錯誤沒抓到) 跟 false positive (抓到的錯誤不是真的錯誤)...所以現階段也不太適合仰賴這工具,頂多算是在最後多加一層保險作心安的感覺。

直接舉個我自己遇到的 false negative 的例子:
int val[10] = {0};
int tmp = val[1];
tmp += val[15]; // false negative
tmp *= val[20]; // false negative
for (int i=0; i<20; ++i) { int tmp = val[i]; } // got you!

我標記 false negative 的那兩行目前還是不出方法可以讓 SGCheck 抓出來,感覺應該就真的是處理能力之外的狀況,所以我之後應該還是不太會去用這東西吧。

沒有留言:

張貼留言