zoukankan      html  css  js  c++  java
  • gdb 调试

    基本用法

    1. gcc -g xx.c xx
    2. gdb xx

    基本命令

    1. start 启动程序, 默认停留在main程序的第一行
    2. run 启动程序, 程序默认运行无参数; 可以指定参数, 跟在sh中执行命令的方式一致, 文件重定向也可以; 如果不指定参数, 则使用上一次已经指定的参数; 也可以用set args arg1..argn指定参数; 清空参数set args
    3. list 缩写l, 查看程序源代码, 默认往下显示10行, list - 表示往上查看10行, list linenum 表示查看该行前后共10行代码, list function_name 表示查看该函数定义前后共10行代码, list filename: linenum, list filename: function 分别表示查看指定文件中的特定行或者特定函数, 上下共10 行代码
    4. break 缩写b, 设置断点 break filename:funcname:labelname:linenum, 一般使用b linenum或者b funcname; 可以增加条件断点, 在描述完断点后, 增加if expression 即可
    5. continue 缩写c, 表示继续执行程序下一个断点; 如果增加参数N, 如 continue N, 则表示执行到下一个断点, 并且该断点要触发了N-1次, 才会在该断点出停下, 否则继续向下执行
    6. print expression, 打印变量的值
    7. show option 查看gdb的配置
    8. info subcommand 查看正在被调试的程序的信息, 根据子命令来区分

    多进程调试

    1. set detach-on-fork off, 默认该参数的值是on
    2. set follow-fork-mode, 可以选择fork后是在父进程还是子进程中停住
    3. info inferiors 查看当前有几个进程, 每个进程都会分配一个编号,用于在不同的进程之间切换调试
    4. inferior num 根据进程分配的编号, 来切换被调试的进程

    参看 http://blog.csdn.net/pbymw8iwm/article/details/787679
    PS:
    1. 父进程的断点会被子进程继承, 因此, 可以先在父进程中打好断点, 然后切换到子进程后, 就可以用continue直接触发断点了
    2. 在fork之后, 子进程默认会停留在fork.c的某一行, 需要continue, 子进程才会继续执行
    3. 子进程的调试方法, 跟普通的进程调试方法类似

    推荐

    1. 默认gdb查看源码很不方便, 不能轻松看出程序执行的位置, 建议安装cgdb, 基于curse和vim的gdb, 查看源码比较方便, 代码高亮显示, 执行多进程调试时, 显示不同的源文件和执行行

    参考

    1. http://www.cnblogs.com/rosesmall/archive/2012/04/12/2444431.html
  • 相关阅读:
    ASP.NET 篇
    .NET Core 篇
    JS-CSS篇
    IIS使用篇
    WebService篇
    电脑使用篇
    数据库使用篇
    正则表达式篇
    Linux学习篇
    Leetcode 198. 打家劫舍 dp
  • 原文地址:https://www.cnblogs.com/zhedan/p/7627201.html
Copyright © 2011-2022 走看看