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 : 从头开始跑程序

原文地址:https://www.cnblogs.com/tekkaman/p/2984746.html