我正在使用C++
中的命令行gdb
调试Ubuntu
代码。我有class A
个函数func1
,func2
和func3
,每个函数都以行28
,42
和{{1}结尾在文件64
中。 A.cpp
使用了一些本地变量,例如func1
,p1
和类成员变量,例如q1
,a_r
。同样,a_t
和func2
也有func3
,p2
和q2
,p3
等局部变量。 q3
也使用另一个类成员变量func2
。它们还使用了除此处提到的变量之外的一些变量。现在,这些函数在循环可变a_s
的循环内调用。
当l_num
的值介于.txt
和l_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 version
,7.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
到达时退出。
答案 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是一个如何做一些类似的事情的例子,它可以适应你的用例。