GDB / C ++ - 根据循环条件将多个变量记录到输出文件中

时间:2018-05-02 14:18:37

标签: c++ cmake gdb

我正在使用C++中的命令行gdb调试Ubuntu代码。我有class A个函数func1func2func3,每个函数都以行2842和{{1}结尾在文件64中。 A.cpp使用了一些本地变量,例如func1p1和类成员变量,例如q1a_r。同样,a_tfunc2也有func3p2q2p3等局部变量。 q3也使用另一个类成员变量func2。它们还使用了除此处提到的变量之外的一些变量。现在,这些函数在循环可变a_s的循环内调用。

l_num的值介于.txtl_num之间时,我想将上述变量记录到10文件中。我试过了:

20

但是这引发了一个错误:set logging on if (l_num >= 10 && l_num <= 20) >break A.cpp: 28 >commands >print a_r >print a_t >print p1 >print q1 >end >break A.cpp: 42 >commands >print p2 >print a_s >end >break A.cpp: 64 >commands >print p3 >print q3 >end >end

我有No symbol "l_num" in current context. = gdb version7.11.1 / gcc version g++ version。我正在使用5.4.0中的cmake进行编译。我有以下设置来关闭优化:

Debug mode

然后在终端中,我使用:

进行编译
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")

我对cmake -DCMAKE_BUILD_TYPE=Debug . 相对较新。请指导这个问题。

编辑:GDB称为循环变量实际上并不正确。它只是一个随循环的每次运行而更新的变量。该循环实际上是读取文件的行,并在l_num到达时退出。

1 个答案:

答案 0 :(得分:0)

此:

if (l_num >= 10 && l_num <= 20)
>break A.cpp: 28
...

只有在当前上下文中有l_num时才有效(例如,如果您在变量l_num存在的框架中)。

它也不会做你想要的:如果l_num在10到20之间,它将在A.cpp:28设置(多个)断点。

您希望在A.cpp:28上设置一个断点,但仅在l_num介于10和20之间时启用该断点。

Here是一个如何做一些类似的事情的例子,它可以适应你的用例。