2025年6月25日 星期三

core dump 以及透過 gdb 來debug,問題點出在哪

 今天我們拿 systemd-journald 的 core dump 來當範例
 解壓縮 core_systemd-journald.tar 可以看到資料夾內有以下檔案


我們這篇,主要是去拿 exe.lz4 與 core.lz4 來放到 gdb 裡面,來做debug

所以我們先把者兩個 lz4 檔案,放到linux 系統中使用以下 command 把他解開,得到兩個檔案,分別是 core 與 exe,
core 是 core dump 紀錄的錯誤資訊,exe 則是此執行檔(systemd-journald)
=>
lz4 -d core.lz4 core
lz4 -d exe.lz4 exe

接著我們把 core 與 exe 丟到有gdb 的 device上,如果編譯的時候,也有編譯出 symbol 的 library 或是 執行檔,也可以準備一下,等等 gdb 會使用到 (symbol 就是沒有被 strip 的檔案)
symbol資料夾如下:


接著到平台上,執行 gdb,command 如下:
=>
gdb exe core


可以看到Core was generated by `/lib/systemd/systemd-journald'.
Program terminated with signal SIGABRT, Aborted.
=> systemd-journald 因為 SIGABRT造成的 crash

接著可以用 bt full 印出完整的資訊

目前只能知道,在 libc.so.6 這個 library的 function,writev() 出了問題,下面指出
No symbol table info available
我們就去找 symbol folder,試試看用 systemd-journald 的 binary跑gdb 試試看


gdb systemd-journald core
會看到多了一些資訊,gdb似乎有載入一些資訊


此時,在重新執行剛剛的指令,可以看到更完整的資訊
=>
gdb exe core
  








2025年6月20日 星期五

指令,把read-only 的filesystem,remount 成 read/write

使用mount指令,先看一下,目前 / 掛載為 read-only,ext4 的 filesystem
root@:# mount
/dev/mmcblk0p16 on / type ext4 (ro,relatime,norecovery)


把 root folder 重新掛載成可 read/write
 mount -o remount,rw /

再用mount看一次
root@:~# mount
/dev/mmcblk0p16 on / type ext4 (rw,relatime,norecovery)