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-r10. 右下显示断点名称和线程。