GDB调试多进程和多线程 |
您所在的位置:网站首页 › gdb多线程多进程如何调试跟踪 › GDB调试多进程和多线程 |
GDB调试单进程
参数列表
命令 命令缩写 命令说明 list l 显示多行源代码 break b 设置断点,程序运行到断点的位置会停下来 info i 描述程序的状态 run r 开始运行程序 display disp 跟踪查看某个变量,每次停下来都显示它的值 step s 执行下一条语句,如果该语句为函数调用,则进入函数执行其中的第一条语句 next n 执行下一条语句,如果该语句为函数调用,不会进入函数内部执行(即不会一步步地调试函数内部语句) p 打印内部变量值 continue c 继续程序的运行,直到遇到下一个断点 set var name=v
设置变量的值 start st 重新开始执行程序,在main函数的第一条语句前面停下来 file
装入需要调试的程序 kill k 终止正在调试的程序 watch
监视变量值的变化 backtrace bt 查看堆栈信息(也就是函数调用信息) frame f 查看栈帧 quit q 退出GDB环境 注意: break不能对{}类似的括号使用,因为这些不属于机器指令。 print 可以打印变量的值,也可以打印地址。p &a(打印变量a的地址) 在gdb中使用 thread apply all bt 查看所用线程堆栈信息。 bt 打印当前的函数调用栈的所有信息。 (gdb) bt #0 func (n=250) at tst.c:6 #1 0x08048524 in main (argc=1, argv=0xbffff674) at tst.c:30 #2 0x400409ed in __libc_start_main () from /lib/libc.so.6 从上可以看出函数的调用栈信息:__libc_start_main --> main()--> func() 加入心在所在的栈帧是0,也就是在func函数中,那么利用frame 2可以进入main函数的栈帧。 dispaly k,比如k是一个变量,那么每次next,都会显示k这个变量的值。 watch k,和display不同的是,每次next,只有k的值发生变化的时候,才会显示k的值。 函数调用栈的查看
set follow-fork-mode [parent|child] set detach-on-fork [on|off] 查询正在调试的进程:info inferiors 切换调试的进程: inferior 添加新的调试进程: add-inferior [-copies n] [-exec executable] ,可以用file executable来分配给inferior 可执行文件。 其他:remove-inferiors infno, detach inferior #include #include #include #include int main() { pid_t pid; pid=fork(); if(pid |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |