zoukankan      html  css  js  c++  java
  • gdb 调试多线程

    基本i threads 等操作略过,只谈线程同步、异步控制:

    先点到,gdb attach到主线程t1 时,所有线程都会停止,所谓同步异步效果,是指在apply continue到所有线程之后,

    再切换到t2,发现t3还在运行(如果t3卡在了断点上,也算运行,只不过运行后停止了)。

    再点到,gdb 直接attach 到非主线程时,是不影响,其他线程的启停的。无论如何设置non-stop或者schedule选项。

    以下,重点说下non-stop和schedule选项:

    1 non-stop

    只能在~/.gdbinit里设置,不能在gdb运行时设置,设置内容为:

    set target-async 1
    set pagination off
    set non-stop on

    attach到主线程t1后,切换t3,

    设置t3和t2内部的断点,执行c,t3运行后卡在断点,但是t2是不运行的,此时应t apply t2 t3(为了回到中断,只写t2会无法输入gdb操作) c,才能通知t2运行。

    如果t2无断点,那么一次t apply t2 t3后,他就是一直执行的了!

    2 scheduler-locking选项

    可以在主线程或者子线程设置均可。

    在使用step或者continue命令调试当前被调试线程的时候,

    off 不锁定任何线程,也就是所有线程都执行;如果

    on 只有当前被调试程序会执行;

    step 在单步的时候,除了next过一个函数的情况(熟悉情况的人可能知道,这其实是一个设置断点然后continue的行为)以外,只有当前线程会执行。

           可以理解为step锁,非step不锁。

    t2和t3设置断点后,设置sche为off(俩t都执行)或者on(只看到一个thr执行),直接c,就能看到t2和t3的同步或异步效果;

    这时,如果t app 2 3 c,执行,效果和c一样,即使t2、t3只有一个断点,也会同时停下来的(non-stop在非断点的t不会停,除非新设b断干预之)。

    注意:set non-stop on和scheduler-locking同时设置效果未定义,测试,设置non-stop后再设置sche=on貌似无效!

    参考:

        coolshell的 gdb系列

       gdb技巧集 http://www.kancloud.cn/wizardforcel/gdb-tips-100/146771

  • 相关阅读:
    Codeforces Beta Round #92 (Div. 2 Only) B. Permutations 模拟
    POJ 3281 Dining 最大流 Dinic算法
    POJ 2441 Arrange the BUlls 状压DP
    URAL 1152 Faise Mirrors 状压DP 简单题
    URAL 1039 Anniversary Party 树形DP 水题
    URAL 1018 Binary Apple Tree 树形DP 好题 经典
    pytorch中的forward前向传播机制
    .data()与.detach()的区别
    Argparse模块
    pytorch代码调试工具
  • 原文地址:https://www.cnblogs.com/zhaoyl/p/5970347.html
Copyright © 2011-2022 走看看