在docker中使用gdb调试程序

在docker中使用gdb调试程序,第1张

在docker的容器中,不能使用gdb调试程序。经过调查发现是原因是 ptrace: Operation not permitted. 。

上网查找发现是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从列表中


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10989949.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存