spacemacs 使用gdb

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sheismylife/article/details/71171559

1. 编译工程时用-g参数

2. 进入编译好的二进制程序所在的目录,M-x gdb

3. 会提示正确的命令,如果没有自己补上

gdb -i=mi example

4. 会自动打开多个buffer,如下图


左上buffer用来输入gdb命令,左中buffer显示入口文件main.cc代码,

用M-m 加数字可以跳到指定的buffer

5. 到main.ccbuffer后,使用C-x C-a C-b设置断点, 删除断点是C-x C-a C-d

6. 回到左上的buffer,输入run,后面可以带参数

(gdb) run "abc"

7. 右上的buffer会显示local变量的值

MyApp &                                     app        @0x877fa8: {config_ = std::unique_ptr<Configuration> containing 0x8a6260}
Configuration *                             config     0x8a6260
mongocxx::v_noabi::instance                 inst       <complex data type>
mongocxx::v_noabi::client                   conn       <complex data type>
mongocxx::v_noabi::collection               collection <complex data type>
mongocxx::v_noabi::cursor                   cursor     <complex data type>
std::__cxx11::string                        mongo_url  <complex data type>
bsoncxx::v_noabi::builder::stream::document document   <complex data type>
const std::exception &                      e          <error reading variable>

一堆complex data type,不友好,以后解决。

8. 可以在左上的gud buffer中用print打印变量值

(gdb) p argv[0]
$3 = 0x7fffffffdfec "/home/dean/work/gitlab/gitlab.com/mystudy/mongodb/code/simple/builder/bin/example"

n 可以单步运行

c  运行直到遇到下一个断点才会停止

9. 右中的buffer显示标准输入输出

功能 命令 默认快捷键
添加断点 gud-break C-x C-a C-b 或 C-x <SPC>
删除断点 gud-remove C-x C-a C-d
运行/继续程序 gud-go
单步执行,无视函数 gud-next C-x C-a C-n
单步执行,进入函数 gud-step C-x C-a C-s
跳出当前函数 gud-finish C-x C-a C-f
运行到光标所在语句 gud-until C-x C-a C-u
继续运行程序 gud-cont C-x C-a C-r

10. 右下显示断点名称和线程。




猜你喜欢

转载自blog.csdn.net/sheismylife/article/details/71171559