[問題] 程式執行期間的除錯怎麼做?

看板C_and_CPP (C/C++)作者 (兌現承諾)時間15年前 (2011/05/09 15:08), 編輯推噓2(2023)
留言25則, 8人參與, 最新討論串1/1
開發平台(Platform): VC++ 問題(Question): 程式執行期間vector爆掉了,但是程式有點複雜 一時我也不清楚哪個vector爆了。這時候大概"只能"用 逐步除錯吧?麻煩的地方在於執行有一段時間才會出錯, 那豈不是非常耗時!這時候還有什麼撇步嗎? 什麼時候vector會爆掉呢?我檢查過一些for迴圈的程式, 還沒查出下標超過容量界限的。又在這些迴圈內 我有做一些vector的copy。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.120.11.63

05/09 15:19, , 1F
有看call stack嗎? 通常會有點幫助
05/09 15:19, 1F

05/09 15:37, , 2F
call stack!第一次聽到.去看一下.謝謝囉!
05/09 15:37, 2F
※ 編輯: luckychild 來自: 140.120.11.63 (05/09 16:23)

05/09 17:37, , 3F
http://ppt.cc/9vSO 參考看看!(張爸臉
05/09 17:37, 3F

05/09 18:44, , 4F
爆掉是怎麼爆法? 記憶體不夠用?
05/09 18:44, 4F

05/09 21:31, , 5F
不知道耶!你說的也有可能.我最終沒逐步除錯,因為耗時
05/09 21:31, 5F

05/09 21:32, , 6F
所以我還不知道到底花生什麼事 =.=
05/09 21:32, 6F

05/09 22:51, , 7F
我把vector用爆的時候 是在寫判斷質數的時候....
05/09 22:51, 7F

05/10 00:33, , 8F
vector內塞了ptr*的東西???
05/10 00:33, 8F

05/10 14:19, , 9F
嗯!我vector內的確有放指標...
05/10 14:19, 9F

05/10 14:22, , 10F
跳出的對話方塊給的訊息是"下標超過範圍".會發出這個
05/10 14:22, 10F

05/10 14:23, , 11F
訊息應該只有這個可能吧-下標真的超過範圍!
05/10 14:23, 11F

05/10 14:56, , 12F
建議這樣用for(int i = 0 ; i < vector.size() ;++i)
05/10 14:56, 12F

05/10 14:57, , 13F
用iterator的話,記得檢查end的位置.如果這樣還爆掉.
05/10 14:57, 13F

05/10 14:58, , 14F
一定是更瑣碎的問題
05/10 14:58, 14F

05/10 14:59, , 15F
在 Linux 下可以藉助 valgrind 這類的工具
05/10 14:59, 15F

05/10 14:59, , 16F
不過 Windows 我就不知道什麼可以用了
05/10 14:59, 16F

05/10 15:26, , 17F
我在寫分子動力的模擬,發生問題的程式碼是在做sorting
05/10 15:26, 17F

05/10 15:28, , 18F
的動作,系統中有很多粒子,其位置每個time step都不太
05/10 15:28, 18F

05/10 15:30, , 19F
一樣.總之情況有點複雜,又不方便把有點龐大的程式碼
05/10 15:30, 19F

05/10 15:31, , 20F
貼上來,只好先自行研究整理一下,改天在po文問有關
05/10 15:31, 20F

05/10 15:31, , 21F
sorting的演算法.
05/10 15:31, 21F

05/10 17:03, , 22F
其實訊息已經提示下標超過範圍,那麼檢查一下sort過程中
05/10 17:03, 22F

05/10 17:04, , 23F
是否有超過vector的範圍,目前猜測是這樣,還有你也可以
05/10 17:04, 23F

05/10 17:15, , 24F
找替代valgrind的工作吧,會快很多.
05/10 17:15, 24F

05/10 17:19, , 25F
文章代碼(AID): #1DnvBYeD (C_and_CPP)
文章代碼(AID): #1DnvBYeD (C_and_CPP)