GDB调试之多线程切换 您所在的位置:网站首页 gdb调试线程 GDB调试之多线程切换

GDB调试之多线程切换

2023-07-03 12:43| 来源: 网络整理| 查看: 265

其余相关内容可参考个人博客

选择调试进程

在GDB中有两个选项来确定调试的进程:

follow-fork-mode,设置调试哪个进程detach-on-fork,GDB在fork之后是否断开(detach)某个进程的调试

这两个选项的参数组合起来的效果如下表

follow-fork-modedetach-on-fork效果parenton只调试父进程childon只调试子进程parentoff同时调试两个进程,子进程暂停childoff同时调试两个进程,子进程暂停 进程切换 info inferiors,查看当前所有进程inferiors ,切换当前GDB调试进程,其中num为上一条指令中列出的进程Num 实例 int main(void) { pid_t pid; pid = fork(); if(pid < 0) { printf("fork error\n"); } else if(pid == 0) { printf("in child \n"); } else { printf("in father,pid of child:%d\n", pid); } }

首先展示如何选择跟踪父子进程,如图

若同时调试两个进程,并且切换进程的效果如下

多线程调试

在另一篇博客《GDB调试之基本指令介绍》中第6章提到了在线程中打断点,这里再介绍下

当你的程序是多线程时,你可以定义你的断点是否在所有的线程上,或是在某个特定的线程。 break line thread threadNo 其中line为你的源码行数,threadNo为info threads命令中GDB给出的线程ID,若不指定threadNo,则为所有线程打断点。

在多线程调试时,可以设置其余线程的阻塞状态

show scheduler-locking,查看设置set scheduler-locking on,表示调试线程执行时,其余线程锁定,阻塞等待,off ,表示不锁定其他线程step ,表示在step(单步)调试时,只有当前线程运行

这样就可以避免next调试时总是跳转到其他线程啦

线程和进程一样,同样支持切换

info thread, 列出当前所有线程thread ,切换线程,num为上一条指令给出的


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有