zoukankan      html  css  js  c++  java
  • GDB scheduler-locking 命令详解

    GDB scheduler-locking 命令详解

    GDB> show scheduler-locking     //显示线程的scheduler-locking状态
    GDB> set scheduler-locking on    //调试加锁当前线程,停止所有其他线程

    set scheduler-locking mode
    Set the scheduler locking mode. It applies to normal execution, record mode, and replay mode. If it is off, then there is no locking and any thread may run at any time. If on, then only the current thread may run when the inferior is resumed. The step mode optimizes for single-stepping; it prevents other threads from preempting the current thread while you are stepping, so that the focus of debugging does not change unexpectedly. Other threads never get a chance to run when you step, and they are completely free to run when you use commands like ‘continue’, ‘until’, or ‘finish’. However, unless another thread hits a breakpoint during its timeslice, GDB does not change the current thread away from the thread that you are debugging. The replay mode behaves like off in record mode and like on in replay mode.

    show scheduler-locking
    Display the current scheduler locking mode.

    By default, when you issue one of the execution commands such as continue, next or step, GDB allows only threads of the current inferior to run. For example, if GDB is attached to two inferiors, each with two threads, the continue command resumes only the two threads of the current inferior. This is useful, for example, when you debug a program that forks and you want to hold the parent stopped (so that, for instance, it doesn’t run to exit), while you debug the child. In other situations, you may not be interested in inspecting the current state of any of the processes GDB is attached to, and you may want to resume them all until some breakpoint is hit. In the latter case, you can instruct GDB to allow all threads of all the inferiors to run with the set schedule-multiple command.

    set schedule-multiple
    Set the mode for allowing threads of multiple processes to be resumed when an execution command is issued. When on, all threads of all processes are allowed to run. When off, only the threads of the current process are resumed. The default is off. The scheduler-locking mode takes precedence when set to on, or while you are stepping and set to step.

    show schedule-multiple
    Display the current mode for resuming the execution of threads of multiple processes.

    GDB> set scheduler-locking off
    GDB> show schedule
    schedule-multiple  scheduler-locking  
    GDB> show scheduler-locking 
    Mode for locking scheduler during execution is "off".
    GDB> set scheduler-locking step
    GDB> show scheduler-locking 
    Mode for locking scheduler during execution is "step".
    GDB> set scheduler-locking on
    GDB> show scheduler-locking 
    Mode for locking scheduler during execution is "on".
  • 相关阅读:
    Android Permission 访问权限大全(转)
    .NET中DateTime.Now.ToString的格式化字符串
    linux
    code only
    常用JavaScript操作页面元素的方法
    C#将字符串数组转换为以逗号分隔的字符串
    C#去除数组空格
    追源索骥:透过源码看懂Flink核心框架的执行流程
    高并发请求的缓存设计策略
    spark 2.3 导致driver OOM的一个SparkPlanGraphWrapper源码的bug
  • 原文地址:https://www.cnblogs.com/pugang/p/7698772.html
Copyright © 2011-2022 走看看