gdb 多线程和多进程调试

本文介绍了如何使用gdb进行多进程和多线程调试。在多进程调试中,可以使用`info proc`来查看当前进程信息,并通过`set follow-fork-mode`切换调试目标。在多线程调试方面,`thread`命令用于管理和选择调试线程,`thread apply`则可以对所有线程执行操作。遇到输出限制时,可以调整`set print elements`以实现无限制输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


多进程调试


  • info inferiors : 显示当前的多进程信息. 前面有 * 表示当前调试的进程

在这里插入图片描述


  • inferiors num : 指定当前调试的进程. num表示当前跳转到调试的进程番号.

    如果要调试子进程的话, 可以用 ps 命令查看在使用该命令执行指定进程的调试

在这里插入图片描述

  • set|show follow-fork-mode

    • show follow-fork-mode : 显示当前运行的模式 (先调试父进程还是子进程), 默认是调试父进程

在这里插入图片描述

-   `show follow-fork-mode` : 设置当前先调试的(子或父)进程.

  • set detach-on-fork on|off
    • on : 多个进程同时运行(默认). 而调试的进程默认以 show follow-fork-mode 决定.
    • off : 关闭多进程同时运行. 只有一个默认进程在调试中运行. 一般我们在多进程中就会设置该属性.

  • set follow-exec-mode new|same

    • new : 新建一个 inferior 给执行起来的子进程. 即子进程的编号将会改变

在这里插入图片描述

-   **same** : 子进程的编号不会发生改变

-   `show follow-exec-mode` : 可以通过该命令查看 `follow-exec-mode` 的模式.

多线程调试

  • info threads : 所有线程. * 表示当前调试的线程

    在这里插入图片描述


  • thread ID : 指定当前调试的线程号

在这里插入图片描述


  • set scheduler-locking off|on|step
    • off : 不锁定任何线程所有线程都执行(默认).
    • on : 只有当前被调试程序会执行, 其他线程全部暂停.
    • step : 单步调试中. 只有当前线程会执行.

输出问题

有时我们需要输出一个字符串的所有长度, 但是就如同下面一样, 只会输出一部分数据.

在这里插入图片描述


  • show print elements : 可以查看默认输出的字符个数, 一般默认是 200字符

    在这里插入图片描述

  • set print elements 0 : 设置无限制输出

    在这里插入图片描述

    在这里插入图片描述


小结

这里仅仅只是归纳了部分常用的调试命令, 有兴趣的还是去看看gdb文档吧.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值