GDB

gdb cheat sheet:https://darkdust.net/files/GDB Cheat Sheet.pdf

 

调试之前执行一些初始化代码,在用户目录下新建 .gdbinit 文件,例如 ~/.gdbinit

directory /usr/src/musl-libc
layout src // -tui
set pagination off

 

调试 musl

wget https://musl.libc.org/releases/musl-1.2.4.tar.gz
tar -zxf musl-1.2.4.tar.gz && cd musl-1.2.4
make distclean && ./configure --enable-debug
make -j8 && sudo make install
cd ~ && /usr/local/musl/bin/musl-gcc ~/main.c -g3 -static
gdb a.out

 

record full:GDB 会记录程序的每一条指令执行,并将执行过程保存在一个文件中,以便后续回放和分析

 

调试多线程:https://sourceware.org/gdb/current/onlinedocs/gdb.html/Threads.html

show scheduler-locking // 显示线程的 scheduler-locking 状态
set scheduler-locking on // 锁定线程,只有当前线程或指定线程可以运行
info threads

 

查看内存信息:info proc mappings

忽略某些信号:handle SIGUSR1 SIGSEGV nostop

 

调试程序

  • 1Byte(字节) = 8bit(位)
  • 寄存器位于 CPU 中
  • 32 位,即 4 个字节
  • 64 位,即 8 个字节
  • cpu 从寄存器中取数,送到算逻单元 ALU 中计算
  • info registers
  • info all-registers
  • info registers rsp
  • x/16x $rsp
  • x/4xb &i

几个常用的寄存器

  • sp/esp/rsp(16bit/32bit/64bit)栈寄存器---指向栈顶
  • bp/ebp/rbp 栈基址寄存器---指向栈底
  • ip/eip/rip 程序指令寄存器---指向下一条待执行指令

 


https://sourceware.org/gdb/documentation

https://eli.thegreenplace.net/tag/debuggers

https://jyywiki.cn/OS/2023/build/lect8.ipynb.html

https://jyywiki.cn/OS/2023/build/lect18.ipynb.html

https://github.com/hellogcc/100-gdb-tips

posted @ 2020-08-13 18:58  江湖小小白  阅读(218)  评论(0编辑  收藏  举报