gdb学习记录


如何查看地址值

查看下一个地址:x/x 0x12345679
以八进制显示:x/o 0x12345678
以十进制显示:x/d 0x12345678
显示更多的地址和值:x/8xw 0x12345678(显示从该地址开始的8个字(word),每个字以十六进制格式显示)
p /t __readfds->fds_bits[0] 二进制输出 /x 十六进制输出


查看当前函数参数

当程序在函数中暂停后,即可查看函数的参数。语法如下:

info args

或者

i args


多线程调试

线程状态可以是以下几种:

  • D:不可中断睡眠状态(Uninterruptible Sleep),通常是因为在等待I/O
  • R:正在运行或可运行(Running or Runnable),等待处理器调度
  • S:可中断睡眠状态(Interruptible Sleep),通常是在等待某个事件完成
  • T:已停止(Stopped),通常是由于收到SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU信号
  • t:跟踪停止(Traced Stop),在被调试器暂停时发生
  • Z:已僵尸(Zombie),已终止但未被其父进程清理
D (TASK_UNINTERRUPTIBLE) 	不可中断的睡眠状态
R (TASK_RUNNING)			正在运行,或在队列中的进程
S (TASK_INTERRUPTIBLE)		可中断的睡眠状态
T (TASK_STOPPED)			停止状态
t (TASK_TRACED)				被跟踪状态
Z (TASK_DEAD - EXIT_ZOMBIE) 退出状态,但没被父进程收尸,成为僵尸状态
W    						进入内存交换(从内核2.6开始无效)
X (TASK_DEAD - EXIT_DEAD)   退出状态,进程即将被销毁


<    高优先级
N    低优先级
L    有些页被锁进内存
s    包含子进程
+    位于前台的进程组;
l    多线程,克隆线程  multi-threaded (using CLONE_THREAD, like NPTL pthreads do)

用 GDB 调试多线程程序_gdb多线程-CSDN博客

调试时除了当前线程在运行,要想规定其他线程的运行情况用这个命令,有三个选择:

  1. set scheduler-locking off:不锁定任何线程,所有线程都可以继续执行,这是默认选项。
  2. set scheduler-locking on:只有当前线程可以执行,其他线程暂停运行。
  3. set scheduler-locking step: 当单步执行某一线程时,其它线程不会执行,同时保证在调试过程中当前线程不会发生改变。但如果该模式下执行 continue、until、finish 命令,则其它线程也会执行,并且如果某一线程执行过程遇到断点,则 GDB 调试器会将该线程作为当前线程。

如果你想要对一个连续的线程ID范围内的所有线程应用命令,例如从线程ID 1到线程ID 10的所有线程

thread apply 1-10 command


只暂停指定线程,其他线程不影响

[gdb调试---多进程、线程]https://zhuanlan.zhihu.com/p/666440042
gdb调试多线程,默认采用all-stop模式,即只要有一个线程暂停执行,其他线程都会暂停。
有时调试其他线程,其他线程正常化执行,可以将all-stop模式改为non-stop模式,即暂停某一线程,不会影响其他线程
命令show non-stop查看当前的non-stop模式状态

(gdb) show non-stop
Controlling the inferior in non-stop mode is off.

命令set non-stop [mode]查看当前的non-stop模式状态

(gdb) set non-stop on
(gdb) show non-stop
Controlling the inferior in non-stop mode is on.

non-stop模式下,在指定线程设置断点,不会中断其他线程



总结

1 attach之前,set non-stop on
2 attach 进程id
3 set scheduler-locking on
4 thread apply all c &  恢复所有线程为运行态
5 开始给ctp动态库底层线程设置断点, b myselect thread 线程id
6 ctpApi_client触发ctp请求
7 gdb中ctp动态库底层线程触发断点,开始单步调试next

posted @ 2024-08-26 14:14  guanyubo  阅读(41)  评论(0编辑  收藏  举报