我一直有这个问题,但似乎总是推迟问这个问题,因为我好像做错了什么......但现在我觉得不是......拿了这个代码:
#include <string>
#include <iostream>
#include <algorithm>
int main(int argc, char** argv)
{
if(argc < 2)
{
std::cout << "usage: " << argv[0] << " <string>" << std::endl;
return 1;
}
std::string str = argv[1];
std::reverse(str.begin(), str.end());
std::cout << str << std::endl;
return 0;
}
使用命令编译:
g++ -std=c++11 -Wall main.cpp -o main -O0 -ggdb3
我正在使用最新的主干版本的 gcc,我的主干是在 9 月 23 日左右拍摄的……另外请注意,我没有进行优化编译!
现在无论如何,我开始调试,如下所示:
gdb --quiet --args ./main string
我在第 12 行设置了一个断点(反向算法)
b 12
然后我运行程序
run
然后我尝试打印出字符串,看看它是什么
print str
我亲爱的朋友们,这对我来说似乎很奇怪:之前的命令的输出是:
No symbol "str" in current context.
快速检查局部变量也不显示字符串
info locals
我得到的只是
std::__ioinit = {static _S_refcount = 2, static _S_synced_with_stdio = true}
所以我想知道,是我有错,还是编译器或调试器有错……这对我来说很长一段时间以来一直是一个非常痛苦的问题……所以感谢您阅读这个问题.. . :)
编辑:现在很明显我的 gcc 构建有问题,我想知道是否有人遇到过错误报告或任何其他似乎存在类似问题的情况......我会还可以尝试检查最近构建的 gdb,以确保我当前的调试器(ubuntu 附带)绝对没有问题......这有意义吗?
EDIT2:所以在编译gdb v7.5之后,我得到了相对相同的结果,除了根本没有本地人......我想这意味着这是一个gcc问题,谢谢大家......