GDB scheduler-locking 命令详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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".

 

以上是关于GDB scheduler-locking 命令详解的主要内容,如果未能解决你的问题,请参考以下文章

Linux命令进阶:grep,sed,awk全家桶(文本处理技术详例)

adb操作命令详大全

Windows下使用 npm 命令安装 Appium(详)

GDB 调试命令

代码调试篇:如何编写 gdb 自定义命令

代码调试篇:如何编写 gdb 自定义命令