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-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. 右下显示断点名称和线程。
以上是关于spacemacs 使用gdb的主要内容,如果未能解决你的问题,请参考以下文章