網路上關於VC除錯的一些文章

2021-04-15 07:45:53 字數 916 閱讀 1814

一.探針除錯法

程式設計或測試時有時會遇到記憶體讀寫失敗造成程式掛起的情況,這通常是陣列下標越界導致程式試圖讀寫作業系統的私有空間。windows顯示的出錯資訊是16進製制的出錯指令位址,但卻無法告訴我們這是源**的哪一行。因為越界讀取的資料通常是隨機的,產生記憶體讀寫失敗的時間也是隨機的,難以通過除錯找到缺陷位置。又如果程式結構複雜或**量大,難以通過**走查確定缺陷位置,別擔心,我們還有一種辦法——探針法。思路就是在源**裡插入很多簡短的探針**,利用windows給出的出錯指令位址想辦法找到對應的源**。

探針法的具體步驟是在源**檔案開頭定義乙個全域性變數比如叫probe,然後在每個子程式開頭和你認為可能出問題的地方給probe賦不同的值,比如在子程式1開頭probe = 1;在子程式2中加入probe = 2;以此類推。只要看到這個值你就知道這是源程式中的什麼地方。現在拿出你心愛的反彙編工具對你的可執行檔案作一下反彙編(推薦使用ollydbg),如果是用vc的只要程式掛掉時按取消按鈕,進入vc的除錯環境,看程式停在什麼地方,上下找找看有沒有你灑下的探針。因為使用全域性變數,探針在反彙編時是很容易辨認的,類似這樣的語句

mov [0x41039e], 3

如果出錯語句的上面是這樣一句的話,你應該可以肯定它的位置了吧。注意找的時候不要找到別的子程式裡去。如果當前的子程式沒有,可以試著修改一下暫存器的值,讓程式能夠單步執行,返回到上一級子程式中,再找找看。如果是在某個系統dll中出錯,那必須退到主程式中,不然是找不到探針的。

探針的思想與開發環境無關,可以不必辛苦地一行一行地去讀源**,但是需要組合語言除錯的一些技巧。如果哪位老大能夠做成工具倒也不錯。如有興趣歡迎來信**。

二.http://www.vckbase.com/document/viewdoc/?id=1473

網上關於測試優先順序文章的一些節選

1.不論有些應用程式看起來有多麼不重要,都需要將每個應用程式考慮在內。任何應用程式功能不正常,都可能會對依賴它來完成工作的人們造成很大的影響。2.確定應用程式優先順序 當制定確定優先順序的方案時,需考慮以下問題 應用程式對單位的重要性 受影響的使用者數量 是否有更新的版本 本地化需要 乙個大型高科技...

知乎上關於固態硬碟的一些知識

白片,其實白片就是封裝後的原片中再檢測到有瑕疵的顆粒 黑片,淘汰的晶元次品 白片 nand 的品質還是有一定保證,再經過篩選,那麼在效能與壽命的指標就比較接近原片了。打磨片固態硬碟相關的資訊 電腦有可能幾個月都不通電一次,謹慎選擇tlc產品。m.2介面是不是都支援nvme?不是,是否支援nvme主要...

關於一些Vue的文章。(4)

diff演算法中的patchvnode方法,以及核心updatechildren方法。在上篇中,我們談到,當vnode不為真實節點,且vnode與oldvnode為同一節點時,會呼叫patchvnode方法。我們直接從原始碼上進行分析 patchvnode 有四個引數 oldvnode 舊的虛擬節點...