使用gdb进行程序调试时,如何将标准输入传给可执行程序?

假设数据在input.txt当中, 可执行文件名为myprogram。

$ cat input.txt

this is a test.

  1. $ gdb myprogram // 启动调试

  2. (gdb) break // 设置断点

  3. run arg1 arg2 ... < input.txt // 传入参数,以及输入数据

  4. n or s //单步调试,n不进入函数,s进入函数

  5. p variable_name //打印变量值

  6. c // 执行至下一断点


使用gdb进行程序调试时,为何变量显示<value optimized out>?

这是因为在编译程序时,设置了-O1, -O2, -O3,应该改为-O0,则变量值可以正常显示。


如果使用cmake来自动生成Makefile,如何加入调试信息?

设置选项-DCMAKE_BUILD_TYPE=Debug


gdb断点设置?

1. break file_path/file_name:line_number

2. break file_path/file_name: function_name