最近在做symbianC++開發。因為引用了一個shapelib的開源庫,在退出程式時,老是會彈出”程式已關閉,程式名稱 alloc:記憶體位址”之類的錯誤。如所示。
上網搜了一下,這個對話方塊往往是記憶體泄露引起的。
Symbian上調試記憶體泄露也有很多方法。其中有一個工具是大家都比較認同的,hooklogger。下載試用了一下,的確很方便。
第一步,下載HookLogger,如下:
http://developer.symbian.com/main/downloads/files/HookLogger.msi
該版本的相關介紹見如下頁面:
http://developer.symbian.com/main/tools_and_sdks/developer_tools/supported/hook_logger/index.jsp
我用的sdk版本是: s60 3rd Edition 1.1,應該symbian7.0到9.0都支援吧
安裝完後在安裝路徑下根據SDK版本, 運行 SetupHooks 即可, 具體步驟如下:
首先在命令提示字元下輸入:
devices
獲得你的SDK對應的 devices 標識, 我電腦上顯示的SDK版本是:S60_3rd_MR_2:com.nokia.s60
然後找到你的HookLogger的安裝路徑, 先切換到你安裝hooklogger的盤符,然後用cd命令進入:
我的安裝在D盤,輸入”D:”斷行符號,然後輸入: cd D:"Symbian"HookLogger 斷行符號
運行
SetupHooks S60_3rd_MR_2:com.nokia.s60
然後先啟動HookLogger,切換到Threads選項卡:
再啟動模擬器,可以看到Threads下面的輸出地區有反應,說明成功了。
運行你要調試的程式,然後退出,程式彈出“程式已關閉的錯誤對話方塊”。然後在HookLogger裡切換到Heap選項卡
點擊下面第三個按鈕,什麼all alloc,第一個單詞沒顯示出來。在上面找到出錯的地址,雙擊彈出如下對話方塊:
在的地方,你可以看到出錯的代碼所在的檔案和行數,然後檢查你的代碼,改正你的錯誤。