gdb调试

本文介绍了使用GDB进行程序调试的方法,强调了在编译时添加-g选项的重要性。内容包括如何进入调试模式、查看内存映射、设置参数以及多线程调试。在多线程调试中,讲解了如何显示和切换线程,以及如何设置断点。此外,还详细阐述了如何进行汇编代码调试,如使用disassemble命令和单步执行指令。这些技巧对于深入理解程序执行过程和定位问题非常有帮助。
摘要由CSDN通过智能技术生成

gdb调试
使用gdb 调试方法,首先要在gcc编译时加入-g选项。
基本命令:https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/gdb.html

	gdb 进入调试 //或者gdb exc_file core_file 调试core dump文件
	(gdb) file exc_file //调试exc_file文件
	查看内存映射:`(gdb) i proc mapping`

	设置参数:
	`run -d 1 -s xxx` (参数为 ‘-d 1 -s xxx’)
	或者:`set args -d 1 -s xxx`, 然后`run`
	
	**多线程**:最好设置`set scheduler-locking on`,这样只调试当前线程
	`info threads` 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的线程。
	`thread ID` 切换当前调试的线程为指定ID的线程。
	`break thread_test.c:123 thread all` 在所有线程中相应的行上设置断点
	`thread apply ID1 ID2 command` 让一个或者多个线程执行GDB命令command。 
	`thread apply all command` 让所有被调试线程执行GDB命令command。
	`set scheduler-locking off|on|step` 估计是实际使用过多线程调试的人都可以发现,在使用step或者continue命令调试当前被调试线程的时候,其他线程也是同时执行的,怎么只让被调试程序执行呢?通过这个命令就可以实现这个需求。off 不锁定任何线程,也就是所有线程都执行,这是默认值。 on 只有当前被调试程序会执行。 step 在单步的时候,除了next过一个函数的情况(熟悉情况的人可能知道,这其实是一个设置断点然后continue的行为)以外,只有当前线程会执行。
	**汇编调试**:https://blog.csdn.net/txx_683/article/details/53453548
	disas/disass/disassemble 函数名/起始地址[,结束地址];
	ni/si:汇编模式下单步执行
	layout asm显示汇编代码调试窗口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值