在linux平台下面做c++開發的時候,需要特別的注意記憶體越界的問題,常見的記憶體越界現象主要有以下兩種:1.在同乙個函式內,分配變數記憶體的長度和填充變數的記憶體長度不一致。2. 在同乙個模組內,不同的函式之間,記憶體分配和記憶體填充不一致。 任何形式的記憶體越界都可以導致系統掛死,通常我們可以借助系統產生的core檔案幫助我們定位bug.
對於第一種情況,core檔案會提示出非常準確的錯誤資訊,但是對於第二種情況,core檔案就不一定會給出準確的提示。例如,在函式a中,我分配了一條查詢記錄的空間,然後初始化了這個位址空間,在函式a中呼叫函式b,函式b中繫結了50條的查詢記錄,然後返回50條查詢結果給a,這個時候系統一定會掛掉,而core檔案絕不會提示你記憶體越界,它會提示你,歸還資料庫鏈結失敗。
這是不是很令人鬱悶,」歸還「資料庫鏈結也會失敗?
對第一種情形,經常是由於忽略所分配變數的型別長度而導致的。
例如:wchar * pbuffer = null;
vos_new(pbuffer, (wchar)pbufferlength);
我們該如何初始化pbuffer呢?
菜鳥們往往會寫為 meset(pbuffer,0,pbufferlength);
後果是,執行該段程式的時候系統會掛死。
正確的應該寫為meset(pbuffer,0,pbufferlength*sizeof(wchar ));
利用GDB除錯CORE檔案
什麼是core dump core dump又叫核心轉儲,當程式執行過程中發生異常,程式異常退出時,由作業系統把程式當前的記憶體狀況儲存在乙個core檔案中,叫core dump。linux中如果記憶體越界會收到sigsegv訊號,然後就會core dump 在程式執行的過程中,有的時候我們會遇到s...
如何檢視core檔案
在unix系統下,應用程式崩潰,一般會產生core檔案,如何根據core檔案查詢問題的所在,並做相應的分析和除錯,是非常重要的,本文對此做簡單介紹。例如,乙個程式cmm test tool在執行的時候發生了錯誤,並生成了乙個core檔案,如下 rw r r 1 root cmm test tool....
Linux下利用core檔案跟蹤錯誤
當程式潛在一些bug,在執行時常常會出現無故崩掉的情況,通過跟蹤其產生的core檔案排查故障是個不錯的選擇。產生core檔案的條件 1.在編譯時,gcc g 需要新增乙個 g引數 2.程式執行所在主機,需要這是climit c 為非0 即 在終端執行 climit a,檢視 core檔案的限制大小,...