私はteststring.cppファイルを持って、私はGDBは出力のstd ::文字列値ことができるかどうかを確認したい:G ++ teststring.cpp -gを使用してグローバル変数のときはstd :: stringをgdbに出力できません。なぜですか?
#include<string>
#include<iostream>
using namespace std;
string sHello="hello world";
int main()
{
cout<<sHello.c_str()<<endl;
return 0;
}
、およびGDBが
(gdb) b main
Breakpoint 1 at 0x400bfa: file teststring.cpp, line 7.
(gdb) r
Starting program: /home/x/a.out
Breakpoint 1, main() at teststring.cpp:7
7 cout<<sHello.c_str()<<endl;
(gdb) p sHello
No symbol "sHello" in current context.
A.OUT
これは奇妙です。私はこのようなメインの最初の行であると
string sHello="hello world";
を移動した場合:
#include<string>
#include<iostream>
using namespace std;
int main()
{
string sHello="hello world";
cout<<sHello.c_str()<<endl;
return 0;
}
私はそれをデバッグする場合は、「P sHelloは」動作します。 これは私にとってとても奇妙です。
なぜ記号がないのですか?
私は "$ readelf -s a.out | grep sHello"を使って両方のバージョンのa.outをチェックしましたが、いずれも結果がわかりません。
私は「sHello」という名前のシンボルがありますときとします
がsHelloは右、ELFファイルのシンボルテーブルに表示されますか?