一般來講,程序運行錯誤,我們都會用gdb進行調試,查看程序報錯中斷時的棧幀信息,並根據信息對程序修改完善。
然而,如果程序是因爲發生內存泄露而終止時,棧幀的信息很可能是“不靠譜”的,這時可以藉助定位程序內存泄露的工具(如valgrind)去發現錯誤點,並加以改正。
原因:
程序的內存空間分爲堆、棧、全局區(靜態區)、字符串常量區、代碼區,而我的程序又是多線程的程序,極有可能是因爲別的地方發生內存泄露後,程序被強制退出,此時棧幀還沒來得及銷燬,錯誤的原因並不在棧幀處,而如果我們依舊揪着棧幀的調試信息不放、硬着頭皮去調試的話,不但不能找到錯誤,還浪費大把的時間。