, 나는 경우 gdb를 출력 할 수있는 표준 : : 문자열 값을보고 싶은 : g ++ teststring.cpp -g 사용std :: string은 전역 변수 일 때 gdb에서 인쇄 할 수 없습니다. 이유가 무엇입니까? 나는 teststring.cpp 파일을 가지고
#include<string>
#include<iostream>
using namespace std;
string sHello="hello world";
int main()
{
cout<<sHello.c_str()<<endl;
return 0;
}
을하고
(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의 GDB
이상합니다. 내가
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는 ELF 파일의 심볼 테이블에 나타납니다 오른쪽 :
나는 "sHello"라는 기호가있을 때 가정?