面经真题 | gdb使用相关知识

gdb使用相关知识

  1. 什么是gdb

    参考答案

    gdb全称为GNU Debugger,是可以运行于多种类Unix平台的程序调试软件。类似的软件还有lldblldb常用于macos

    参考资料:

  2. gdb常见命令有哪些?

    参考答案

    gdb的常见命令有:

    1. help: 获取gdb命令帮助
    2. help <command>: 获取特定gdb命令的帮助
    3. run: 运行到下个断点或程序结束
    4. step: 单步(逐语句)调试,会进入到函数内部执行
    5. next: 单步(逐语句)调试,但不会进入到函数内部执行
    6. finish: 结束当前函数或循环
    7. continue: 执行到下个断点或程序结束
    8. up <N>: 往栈顶移动N帧,N默认为1
    9. down <N>: 往栈顶移动N帧,N默认为1
    10. list: 打印当前点附近的代码
    11. print <name>: 打印名为name的变量值
    12. print *<name>: 打印name指针指向的值
    13. print/x <name>: 以16进制打印name的值
    14. print <name>@<n>: 打印以name为起始地址的n个值
    15. break <name>: 在函数name处设置断点
    16. break <num>: 在行num处设置断点
    17. disable 1: 去使能断点1
    18. enable 1: 使能断点1
    19. delete 1: 删除断点1
    20. delete: 删除所有断点
    21. condition 1 <expr>: 断点1的停止条件为表达式expr为true
    22. condition 1: 删除断点1的所有条件
    23. info break: 显示所有的断点信息
    24. backtrace: 查看栈信息
    25. display <name>: 始终显示变量name的值
    26. undisplay <name>: 取消跟踪name的值
    27. watch <expr>: 监视expr的值,一旦有变化就暂停程序

    参考资料:

  3. gdb调试的原理是?

    参考答案

    gdb使用系统调用ptrace(process trace)去观察和控制其它进程的执行、检查和修改其它进程的内存和寄存器。ptrace的原型如下:

    long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
    

    根据ptrace的manual手册,主要有两种跟踪进程的方式:

    1. 父进程通过fork系统调用创建子进程,在子进程中作如下ptrace调用,然后再通过execv加载子进程程序。

      ptrace(PTRACE_TRACEME, 0, 0, 0);
      
    2. 使用如下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嵌入式面试必考必会的题库。 励志讲清每一个知识点,找到每个问题最好的答案。 让你学懂,掌握,融会贯通。 因为技术知识工作中也会用到,所以踏实学习哦!!!

全部评论

相关推荐

2 3 评论
分享
牛客网
牛客企业服务