spacemacs 使用gdb

Posted csfreebird

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spacemacs 使用gdb相关的知识,希望对你有一定的参考价值。

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-breakC-x C-a C-b 或 C-x <SPC>
删除断点gud-removeC-x C-a C-d
运行/继续程序gud-go
单步执行,无视函数gud-nextC-x C-a C-n
单步执行,进入函数gud-stepC-x C-a C-s
跳出当前函数gud-finishC-x C-a C-f
运行到光标所在语句gud-untilC-x C-a C-u
继续运行程序gud-contC-x C-a C-r

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




以上是关于spacemacs 使用gdb的主要内容,如果未能解决你的问题,请参考以下文章

用spacemacs打造c++ IDE

用spacemacs打造c++ IDE

spacemacs使用semantic跳转代码

如何使缓冲区在 spacemacs 中可写?

spacemacs 初始安装报错

spacemacs及python学习-坑之记录