2017年11月25日 星期六

[Kernel] Linux kernel debug


  • 技巧
    • printk dump messages to console
      • 簡單好用, 行為類似 printf, 不過這會改變 kernel行為 (例如: 執行速度變慢, 使得 race condition 行為不一致)
      • 可同時更改 ring buffer size (更改 kernel boot parameter: log_buf_len), 避免 log的訊息被裁斷
      • 更改 log level, 預設為 KERN_WARNING, e.g. 開啟所有 log:
      • , 並刪除 boot parametersquiet, splash (runtime 查看 boot parameters: cat /proc/cmdline)
        echo 7 > /proc/sys/kernel/printk
    • gdb
      • disassemble function codes
        • gdb vmlinux
          (gdb) dissemble functionName
      • locate core dump:
        • gdb crashed_function_obj, e.g. gdb sd.o
        • (gdb) list *(backtrace_func_shown+offset), e.g. list *(sd_remove+0x20
    • 用 objdump
      • objdump -SdCg sample.o
    • ToDo: add2line 指令介紹, ELF 格式介紹, study Kernel Debugging
    • Reference

沒有留言:

張貼留言