可以首先使用 ps -aux | grep thread 查看我这个程序对应的进程 ID,在上面的图中可以看到我的进程 ID 为 9617,之后可以使用 pstack 直接查看这个进程,可以看到这个进程中有三个线程,Thread1 这个线程在运行 main 函数,Thread2 这个线程在运行 thread_entry_funcA,Thread3 这个线程在运行 thread_entry_funcB 这个...
可以看到,使用backtrace命令,查看当前函数栈帧信息,使用frame 函数栈帧编号命令切换到制定的函数栈帧,此时使用info locals命令查看当前主函数中的局部参数的值,查看完之后,使用frame命令切换到add_range函数,可以看到此时还是处于之前函数运行的地方。 1.2.10 print(p) 打印变量的值 (gdb) print sum $1 = 21845 ...
next 和 step 都是单步执行,但也有差别: next 是 单步步过(step over),即遇到函数直接跳过,不进入函数内部。 step 是 单步步入(step into),即遇到函数会进入函数内部。 5.11 return、finish命令 return 和 finish 都是退出函数,但也有差别: return 命令是立即退出当前函数,剩下的代码不会执行了,ret...
p (print):打印表达式,表达式可以是变量,也可以是操作,也可以是函数调用 print 1,print a+1 print f(a); until:可以运行程序直到退出循环体; finish:运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息; watch:设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在...
通过gdb调试我们可以监控程序执行的每一个细节,包括变量的值、函数的调用过程、内存中数据、线程的调度等,从而发现隐藏的错误或者低效的代码,程序的调试过程主要有:单步执行,跳入函数,跳出函数,设置断点,设置观察点,查看变量。 本文将主要介绍linux下的gdb调试工具常用的命令和具体的使用实例。
(4)设置断点,并且进行单步执行,这里我把断点设置在main函数这里,当然断点设置命令break可以简写b,同时单步执行命令step,也可以简写成s: 注: 有读者就会问,设置断点从main开始,为啥是从14行开始,而不是从13开始呢?第14行中的代码为“n = 1”,恰好是 main 函数中的第一个可执行语句(前面的“int n;”为变量...
通过gdb调试我们可以监控程序执行的每一个细节,包括变量的值、函数的调用过程、内存中数据、线程的调度等,从而发现隐藏的错误或者低效的代码,程序的调试过程主要有:单步执行,跳入函数,跳出函数,设置断点,设置观察点,查看变量。 本文将主要介绍linux下的gdb调试工具常用的命令和具体的使用实例。
finish:完成当前堆栈顶的函数,并退出到调用者 down:切换到调用者 up:切换到被调用者 f <number>: 堆栈的第几层 s 进入到下一层,如果有调用函数,则跳入到调用函数的里面 n:在该函数执行下一条语句指令,如果有函数,相当于把该函数执行完,这是同N最大的区别。
一、表达式 print和许多GDB的命令一样,可以接受一个表达式,GDB会根据当前的程序运行的数据来计算这个表达式,既然是表达式,那么就可以是当前程序运行中的const常量、变量、函数等内容。可惜的是GDB不能使用你在程序中所定义的宏。 表达式的语法应该是当前所调试的语言的语法,由于C/C++是一种大众型的语言,所以,本文中...