私はしばらくの間この問題を抱えていましたが、何か間違ったことをしているように見えるので、この質問をするのをいつも延期しているようです...しかし今はそうではないと感じています...このコードを取りました:
#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の問題だと思います、みんなありがとう...