面经真题 | gdb使用相关知识
gdb使用相关知识
-
什么是
参考答案gdb
?gdb
全称为GNU Debugger
,是可以运行于多种类Unix平台的程序调试软件。类似的软件还有lldb
,lldb
常用于macos
。参考资料:
-
gdb常见命令有哪些?
参考答案gdb的常见命令有:
- help: 获取gdb命令帮助
- help
<command>
: 获取特定gdb命令的帮助 - run: 运行到下个断点或程序结束
- step: 单步(逐语句)调试,会进入到函数内部执行
- next: 单步(逐语句)调试,但不会进入到函数内部执行
- finish: 结束当前函数或循环
- continue: 执行到下个断点或程序结束
- up
<N>
: 往栈顶移动N
帧,N
默认为1 - down
<N>
: 往栈顶移动N
帧,N
默认为1 - list: 打印当前点附近的代码
- print
<name>
: 打印名为name
的变量值 - print *
<name>
: 打印name
指针指向的值 - print/x
<name>
: 以16进制打印name
的值 - print
<name>
@<n>
: 打印以name
为起始地址的n
个值 - break
<name>
: 在函数name
处设置断点 - break
<num>
: 在行num
处设置断点 - disable 1: 去使能断点1
- enable 1: 使能断点1
- delete 1: 删除断点1
- delete: 删除所有断点
- condition 1
<expr>
: 断点1的停止条件为表达式expr
为true - condition 1: 删除断点1的所有条件
- info break: 显示所有的断点信息
- backtrace: 查看栈信息
- display
<name>
: 始终显示变量name
的值 - undisplay
<name>
: 取消跟踪name
的值 - watch
<expr>
: 监视expr
的值,一旦有变化就暂停程序
参考资料:
-
gdb调试的原理是?
参考答案gdb
使用系统调用ptrace
(process trace)去观察和控制其它进程的执行、检查和修改其它进程的内存和寄存器。ptrace
的原型如下:long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
根据
ptrace
的manual手册,主要有两种跟踪进程的方式:-
父进程通过
fork
系统调用创建子进程,在子进程中作如下ptrace
调用,然后再通过execv
加载子进程程序。ptrace(PTRACE_TRACEME, 0, 0, 0);
-
使用如下
ptrace
调用直接跟踪其它进程:ptrace(PTRACE_ATTACH, pid, 0, 0);
当进程被跟踪时,每当有信号(signal)被分发给被跟踪的进程(tracee)时都会导致tracee暂停(
SIGKILL
是个例外)。进行跟踪的进程(tracer)通过waitpid
系统调用(或类似的wait
相关的系统调用)获知tracee
被跟踪的情况。当tracee停止时,tracer还可以使用多种ptrace request
去检查或修改tracee
。gdb断点(breakpoint)功能的软件实现原理是在
-
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
ARM/Linux嵌入式真题 文章被收录于专栏
让实战与真题助你offer满天飞!!! 每周更新!!! 励志做最全ARM/Linux嵌入式面试必考必会的题库。 励志讲清每一个知识点,找到每个问题最好的答案。 让你学懂,掌握,融会贯通。 因为技术知识工作中也会用到,所以踏实学习哦!!!