gdb设条件断点,说找不到string类全局变量的符号,为什么?

xczvver 2016-10-24 05:36:58

#include<string>
using namespace std;
int i=0;
string s="a";
void f()
{
++i;//我想查看s的值然后断在这里
}
int main()
{
f();
s+="b";
f();
s+="c";
f();
s+="d";
f();
return 0;
}

我在main处设断点,进入程序,然后在f函数里面设另一个断点

(gdb) b main
Breakpoint 1 at 0x4009c0: file 1.cpp, line 11.
(gdb) r
Starting program: /home/dev/a.out

Breakpoint 1, main () at 1.cpp:11
11 f();
(gdb) n
12 s+="b";
(gdb) b 6 if strcmp(s.c_str(),"abc")==0
No symbol "s" in current context.

很奇怪,竟然说s这个符号不在当前上下文当中。作为全局变量,s应该在任何的调用上下文当中对吗?
...全文
272 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xczvver 2016-10-25
  • 打赏
  • 举报
回复
我知道了,我是ubuntu16.04,gcc5.4使用了新版的C++11的ABI,可是gdb7.11还不支持。两种workaround (1) 在包含任何标准库之前,#define _GLIBCXX_USE_CXX11_ABI 0 (2) 在gdb里面,使用's[abi:cxx11]'来代替s,注意要使用单引号。 两种都可以工作。
eastfriendwu 2016-10-24
  • 打赏
  • 举报
回复
我试了一下,没有问题的。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧