zoukankan      html  css  js  c++  java
  • gdb

    start&run

      使用run/r或者start命令,GDB建立子进程来运行被调试程序。run和start命令稍有不同,即run仅仅加载程序然后运行,而start会在程序的入口函数(main)设置一个临时断点,程序运行到那里就会暂停,临时断点也随即被清除。另外run和start命令后面都可以加上传递给被调试程序的参数,若不加参数则使用GDB启动时传递的参数或者使用set args命令设置的参数。

    [设置断点] 

      b 12  表示在12行设置断点 : 这里的断点设置在这个项目的主程序文件里面在,如果要在其他文件设置断点,需要加上其他文件名称例如 :

      b uploadmgr.c:upload 表示在uploadmgr.c文件的upload函数打上断点。

      b uploadmgr.c:12  表示在uploadmgr.c文件的12行打上断点.

      d n : 删除指定编号的某个断点

      rbreak 可以用正则表达式来设置断点,这个还是比较有用,比如你想给一个文件所有函数设置断点:

      rbreak xxx.c:*

      就行了,但是有个要求,你这个程序必须已经处于调试状态了,也就是run 之后来设置才有效。不然设置了没反应。

      info b: 查看断点

    [layout模式]

      layout : 进入layout模式

      ctrl + x + a : 进入layout模式

      -argc 给启动的程序传递参数

    [打印变量] 

      当我们要打印某个复杂变量的时候,可以先用pt 打印出改变量的数据结构,然后在打印比较感兴趣的值。比如:

    (gdb) pt progress

    type = struct RequestReader::PostProgress {

        apr_uint32_t id;

        apr_uint64_t total_size;

        apr_uint64_t read_size;

        apr_time_t end_time;

        bool is_succeeded;

        apr_size_t item_id;

    }

      p 打印变量的值

    [继续运行]

      c : 继续运行

      r : 从头开始跑程序

  • 相关阅读:
    文档驱动开发模式在 AIMS 中的应用与实践
    软件“美不美”,UI测试一下就知道
    做运维,送你7个常用的服务器资源监控工具
    掌握ROMA Compose,报表清单不秃头
    技术干货丨隐私保护下的迁移算法
    业务爆发式增长,音视频服务如何做好质量监控与优化?
    MyBatis中SQL语句优化小结
    Go语言微服务开发框架:Go chassis
    揭开KPI异常检测顶级AI模型面纱
    激光雷达lidar与点云数据
  • 原文地址:https://www.cnblogs.com/tekkaman/p/2984746.html
Copyright © 2011-2022 走看看