使用IBM rational purify來檢測應用程式記憶體錯誤

來源:互聯網
上載者:User

使用IBM rational purify來檢測應用程式記憶體錯誤

記憶體錯誤是除了程式邏輯錯誤之外的另一大類錯誤,影響程式的正常運行,造成程式崩潰異常退出,或是並不發作,形成隱患,在滿足一定條件之後才會發作,一旦發作就會導致程式崩潰或是運行結果出錯。

常見的記憶體錯誤包括:棧記憶體訪問越界(也常叫做數組下標越界、下標溢出)、堆記憶體越界、記憶體泄露、未初始化記憶體、非法記憶體區的訪問等等。
棧記憶體訪問越界和堆記憶體越界,大部分情況下導致運行結果出錯,比較容易發現。
記憶體泄露屬隱蔽性錯誤,不容易被發現。當記憶體泄露過多造成耗竭時,會被發現。
未初始化記憶體往往導致程式Debug編譯沒有問題,一旦Release運行就會出錯。所以說,碰到Debug可以但release出錯的時候,最好不要懷疑是編譯器的問題,往往是代碼有問題,
尋找代碼錯誤也不能在release下查,反而要欲左故右(朋友,看過賽車總動員吧?),在Debug下,藉助boundschecker、IBM Rational Purify等工具,把Debug下出現的記憶體錯誤全部解決,然後再切換到release下編譯,我可以保證90%的可能:問題解決了。

下面我就介紹一下IBM Rational Purify Plus

IBM Rational Purify Plus是IBM rational家族的成員之一,使用專利的“代碼注入”技術,可以針對VC++編譯出的程式,在代碼中注入守護代碼,監控記憶體使用量情況,及時報告記憶體錯誤。

使用很簡單,以VC++6為例,首先以Debug模式編譯你的程式,然後運行Purify,在purify中Run你的程式,Purify就會自動的進行代碼注入,包括程式調用的所有DLL也會被注入守護代碼(這點可是比BoundsChecker強,BoundsChecker僅僅注入當前工程),這樣的話,不僅僅能查出程式本身的問題,它所調用的連結庫的問題也會被查出來(想象一下,如果你的程式架構是一個主程式附帶自己開發的眾多動態庫,用Purify是何等的方便。)。

由於VC++6的Debug版的編譯包含源檔案的檔案路徑、行號等資訊,所以Purify可以準確的把出問題的彙編碼和源檔案對應起來,定位原始碼中的錯誤非常的精準。

對VC++6的Release版來說,Purify對記憶體錯誤的查錯大部分無效,僅僅可以查出對非法記憶體區的訪問,這個Windows本身也可以查到,但Purify的報錯資訊可以指出錯誤原因,甚至可以告訴你是什麼函數導致的,比如告訴你是strcpy導致的,這一點上,比windows宛如天書的錯誤報表要好上很多了,所以還是建議使用Purify。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.