使用GDB调试多线程实例详解
<p>先写一段多线程程序。<br><img title="使用GDB调试多线程实例详解" alt="使用GDB调试多线程实例详解" src="https://zhuji.jb51.net/uploads/img/202305/f8a95427b9178c66e49d9b178a8ad099.jpg"></p>
<p>
makefile <img title="使用GDB调试多线程实例详解" alt="使用GDB调试多线程实例详解" src="https://zhuji.jb51.net/uploads/img/202305/7e2de0c5f380f52f24a6e6822f9c6b19.jpg"></p>
<p>
加上 -g参数生成可调式信息, 可以进行调试。</p>
<p>
pthread不是linux下的默认的库,也就是在链接的时候,无法找到phread库中哥函数的入口地址,于是链接会失败。在gcc编译的时候,附加要加 -lpthread参数即可解决。</p>
<p>
<strong>gdb test 进入调试</strong></p>
<p>
<img title="使用GDB调试多线程实例详解" alt="使用GDB调试多线程实例详解" src="https://zhuji.jb51.net/uploads/img/202305/3ac8fbbc118092fb0fcc8f7308fd48aa.jpg"></p>
<p>
<strong>需要调试的地方打下断点,run运行到断点处。</strong></p>
<p>
<img title="使用GDB调试多线程实例详解" alt="使用GDB调试多线程实例详解" src="https://zhuji.jb51.net/uploads/img/202305/538f17d230995c0d39962155ee3cb5a9.jpg"></p>
<p>
<strong>r 运行到断点处,info thread可以查看被调试的线程。</strong></p>
<p>
<img title="使用GDB调试多线程实例详解" alt="使用GDB调试多线程实例详解" src="https://zhuji.jb51.net/uploads/img/202305/45b0c0de0c47738a4ef21b720f341e6e.jpg"></p>
<p>
<strong>thread apply all bt 让所有线程打印堆栈信息 </strong><br><img title="使用GDB调试多线程实例详解" alt="使用GDB调试多线程实例详解" src="https://zhuji.jb51.net/uploads/img/202305/b646747bf364c6bda5c638130d5bddbf.jpg"></p>
<p>
<span>set scheduler-locking off|on|step </span></p>
<p>
在使用step或continue命令调试当前被调试线程的时候,其他线程也是同时执行的,如果我们只想要被调试的线程执行,而其他线程停止等待,那就要锁定要调试的线程,只让它运行。</p>
<p>
off:不锁定任何线程,所有线程都执行。</p>
<p>
on:只有当前被调试的线程会执行。</p>
<p>
step:阻止其他线程在当前线程单步调试的时候抢占当前线程。只有当next、continue、util以及finish的时候,其他线程才会获得重新运行的。</p>
<p>
<span>show scheduler-locking: </span></p>
<p>
这条命令是为了查看当前锁定线程的模式。</p>
<p>
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!</p>
<p>
原文链接:http://blog.csdn.net/qq_35116353/article/details/72931012</p>
頁:
[1]