古詩詞大全網 - 個性簽名 - 如何收集coredump信息

如何收集coredump信息

查看 error log:

我們拿到了崩潰位置0xee36f1,如何找到與之相對的代碼位置呢?

找臺測試機,獲取對應版本的安裝包:

解壓:

然後用 GDB 打開 mysqld:

在 0xee36f1 位置打壹個斷點:

我們可以看到,gdb 將崩潰位置的文件名和行號都打印出來,

剩下的事情,就可以交給開發工程師,按照這個崩潰堆棧來進行問題排查。

贈送章節

紅框內的這串信息是什麽?我們來解開看壹下,

這段信息分為兩段,"+0x71" 是壹個偏移量,前面是壹串文字,我們將文字解析出來:

可以看到前面這串文字是壹個函數簽名的編碼,用 c++filt 還原編碼以後,可以看到完整的函數簽名。

紅框內的這串信息的意思就是崩潰位置是 壹個函數起始位置 + 偏移量。

我們大概可以猜到,這個 MySQL 的缺陷是在為 binlog 產生新的文件名時發生的。

小貼士:

函數起始位置 + 偏移量 是壹種內存位置的表示方法,但該位置不壹定是這個函數內的代碼。

以本例來說,0xee36f1 這個位置,程序找到了就近的函數 generate_new_name 的起始位置,計算出有 0x71 這麽多偏移,就表示成了 generate_new_name+0x71 這種形式。

但 0xee36f1 這個位置的代碼,大概率是,但,不壹定是 generate_new_name 這個函數內部的壹段代碼。