链接-写的真好
链接2-gdb的non-stop模式的介绍
文中提到了gdb中start与run的区别,kill -9与kill -11的区别,可以读读
1.一些命令
命令 | 说明 |
info threads | 查看当前程序中的所有的线程 |
thread 线程ID | 切换到不同的线程进行调试 |
show scheduler-locking | 查看当前线程的调度锁的使用模式 |
set scheduler-locking on | 请求调度锁开启,表示调试当前线程时,其它线程锁定不能运行 |
set scheduler-locking off | 请求调度锁关闭,表示调试当前线程时,其它线程不锁定能继续运行(默认值) |
set scheduler-locking step | 设置线程调试模式,单步模式,只有被调用线程执行,防止其他线程在执行命令的时候抢占当前线程 |
thread apply all command | 所有线程都执行command命令 |
thread apply all bt | 查看所有线程的堆栈 |
thread apply ID1,ID2,ID3... command | 指定具体线程去执行command命令 |
set target-async 1 set pagination off set non-stop on | 当前线程受控,其他线程不受干扰 |
2.问题:scheduler-locking和non-stop参数有什么区别和联系呢?
non-stop针对某个线程遇到断点的时候,其他线程的阻塞情况。比如说线程1,线程2,线程3都在运行的时候,如果在线程2的某个地方设置了断点,如果事先设置了set non-stop on,那么线程1和线程3就不会受到线程2的断点的影响,线程1和线程3继续执行各自线程该做的事情。但是non-stop的设置对正在运行的线程不能设置,会报【多线程进行时,不能改变这个设置】,它的设置像是一个预先的值,是对整个进程而言的。
3.问题:为什么kill -11能产生coredump文件但kill -9不产生coredump文件呢?
“kill -11”、“kill -9”这些数字实际上代表的是信号的值:
#define SIGKILL 9
#define SIGSEGV 11
“9” 表示的是强制终止进程,SIGKILL信号不能被屏蔽,不能被忽略;
“11” 表示的是强制生成coredump文件,相当于是向未定义的内存去写入数据。