上网查找发现是ubuntu的安全设置问题,运行如下命令可以解决:
但仍然提示 ptrace: Operation not permitted.
再次查找 docker ptrace: Operation not permitted. ,发现了docker的一个issues,原因是apparmor的docker profile中限制了ptrace。
通过改变docker profile的状态,可以让gdb正常运行了。
最近项目需要用到gdb调试程序, 鉴于每次用时都要google回忆下常用的命令,效率有点low,故整理份命令备忘录,如下:
GDB Layout命令
每次gdb时不知道程序跑到哪了,只能list?? 错, layout窗口才是王道!!
GDB 跳转执行命令
注: call func() 与 print func() 的区别,在于调用void函数时, call func()没有返回值, 而print有~~
GDB调试输出命令
注:
p/x 3*i -- x for hexadecimal, o for octal, d for decimal, f for float, c for char, s for string
断点
观察点
当待观察点被读 或 被写时,程序停下来,并输出相关信息
Display跟踪点
Gdb调试注意:在Gcc编译选项中一定要加入
–g
退出GDB:quit
或
Ctrl+d
调试过程:
1.
查看文件
命令:
(gdb)
l
命令:(gdb)
b
行号
注:到第17行停止,并没有执行17行
3.
查看断点情况
info
b
4.
运行代码
r
命令:
(gdb)
r
(也可以指定行开始运行,在r后面加上行号)
5.
查看变量值
p
命令:(gdb)
p
变量名
6.
设置监视点:
watch
z
(变量名)
也可以是复杂的表达式
7.
单步运行
命令:(gdb)
n
(逐过程)
8.逐步,会进入函数
命令:(gdb)
s
9.条件断点
将正常断点转变为条件断点:condition
如:condition
1
i
==
10
只有当满足条件i
==
1时,才会在断点1处暂停
10.
恢复程序运行
c
命令:
(gdb)
c
(程序就会运行,如果没有断点,就运行剩下部分,如果有断点,就会运行到下一个断点)
11.
去除断点
clear
line_number
clear
filename:line_number
12.
help
12.1
help找出类别
12.2help从列表中
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)