作者moebear (萌熊)
看板C_and_CPP
標題Fw: [問題] 如何發現存取越界? c/c++(V.S.)
時間Sun Apr 16 02:52:39 2017
※ [本文轉錄自 Programming 看板 #1OybZE4i ]
作者: moebear (萌熊) 看板: Programming
標題: [問題] 如何發現存取越界? c/c++(V.S.)
時間: Sun Apr 16 01:30:51 2017
開發平台:windows 10
目標環境:大概是linux,還是unix,分不太清楚。
開發軟體: visual studio 2015 c++
各位好,最近有門課在用judge system,發現我常常會有存取越界的問題
但是在我的編譯軟體(visual studio 2015)上面會偵測不到這個問題,
我也有用系上的工作站(linux環境),直接用g++編譯後執行的話也沒有顯示存取越界
我想 既然judge可以找到這個問題
那在編譯軟體上面應該也可以......吧?
想問問看有沒有什麼方法可以幫助我找到哪邊有存取越界。
舉例來說:
unsigned long long a[3]={1,2,3};
b=b/a[-1];
今天遇到的大概是這樣的情況,我去追蹤,發現a[-1]是一個很大的正數,
在過程中是看不到他造成的影響,debug過程也沒有警告。
能不能在我存取到不該存取的位置之後能有警示?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.91.189
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Programming/M.1492277454.A.12C.html
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 轉錄者: moebear (140.113.91.189), 04/16/2017 02:52:39
※ 編輯: moebear (140.113.91.189), 04/16/2017 02:57:53
1F:推 Hazukashiine: en.cppreference.com/w/cpp/container/array/at 04/16 03:00
2F:→ Chikei: valgrind ? 04/16 03:03
3F:→ Sylveon: try -fsanitize=address ? 04/16 04:38
4F:推 LPH66: vs 應該是沒有 -fsanitize 的選項的樣子, 可能要靠外部工具 04/16 07:46
5F:→ MOONY135: VS有的話我也想知道... 04/16 08:55
6F:推 Ommm5566: 印象中google的gtest和benchmark偶爾可以攔截到這種錯誤 04/16 09:26
7F:→ Ommm5566: 話說回來說這是你的問題 04/16 09:26
8F:→ Ommm5566: C++提供很多工具,寫程式本來就是一直在做取捨 04/16 09:27
9F:→ Ommm5566: 不做檢查程式碼會少,速度會快 04/16 09:27
10F:→ Ommm5566: 每次執行檢查如果要做檢查,速度就是慢一倍 04/16 09:27
11F:→ Ommm5566: 不然你以為為什麼debug mode遠遠比release mode慢 04/16 09:27
12F:→ Ommm5566: 陣列傳進function還是要給size 連這都不檢查要怪誰 04/16 09:29
13F:推 kwpn: 改用vector 呼叫at? 04/16 09:44
14F:→ MOONRAKER: 這個雙黃線太爛了,開到對面居然不會把我彈回來。 04/16 10:32
15F:→ MOONRAKER: (設計對白) 04/16 10:32
謝謝各位大大,at看起來滿符合要求的,之後會盡量改用at取。
我用 -fsanitize=address也得到一些錯誤回饋,謝謝各位。
我了解這是我程式設計的問題,我是希望能在已經確定我產生存取越界的時候,
能比較快地找到問題點,我的想法是,既然教授的系統可以做到這件事情,
沒有理由那些由大公司或是g++等編譯或是其他外掛程式沒有辦法做到
※ 編輯: moebear (140.113.91.189), 04/16/2017 13:25:24
16F:推 Ommm5566: at就是每次存取會檢查 你說的大公司系統也是 04/16 13:53
17F:→ tuyutd0505: 通常教授的系統會抓這個都是要防止緩衝區溢位攻擊 04/16 13:58
18F:→ tuyutd0505: 就是怕有學生黑他 04/16 13:58
19F:→ er230059: 教授的server每天都有人在亂try吧XD 保護當然要做好 04/16 14:21