I build llvm+clang+lldb 3.7.0 from source code on centos7, the build command is “cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DLLVM_LIBDIR_SUFFIX=64”, there is no error during building process.
And then I compile following c++ code using command “clang++ -std=c++11 -stdlib=libc++ -lc++abi -g t.cpp”:
// t.cpp #include
using namespace std;
int main() {
string s = “aa”;
cout << s;
}
Try lldb to debug a.out, found that I can’t print string s which shows empty:
lldb a.out
(lldb) target create “a.out”
Current executable set to ‘a.out’ (x86_64).
(lldb) l
4 int main() {
5 string s = “aa”;
6 cout << s;
7 }
(lldb) b 6
Breakpoint 1: where = a.out`main + 94 at t.cpp:6, address = 0x0000000000400e5e
(lldb) r
Process 150 launched: ‘/root/a.out’ (x86_64)
Process 150 stopped
thread #1: tid = 150, 0x0000000000400e5e a.outmain + 94 at t.cpp:6, name = 'a.out', stop reason = breakpoint 1.1 frame #0: 0x0000000000400e5e a.outmain + 94 at t.cpp:6
3 using namespace std;
4 int main() {
5 string s = “aa”;
→ 6 cout << s;
7 }
(lldb) p s
(std::__1::string) $0 = {}
Could you please help point out what’s wrong in my env? Thanks.
I build llvm+clang+lldb 3.7.0 from source code on centos7, the build command is “cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DLLVM_LIBDIR_SUFFIX=64”, there is no error during building process.
And then I compile following c++ code using command “clang++ -std=c++11 -stdlib=libc++ -lc++abi -g t.cpp”:
// t.cpp #include
using namespace std;
int main() {
string s = “aa”;
cout << s;
}
Try lldb to debug a.out, found that I can’t print string s which shows empty:
lldb a.out
(lldb) target create “a.out”
Current executable set to ‘a.out’ (x86_64).
(lldb) l
4 int main() {
5 string s = “aa”;
6 cout << s;
7 }
(lldb) b 6
Breakpoint 1: where = a.out`main + 94 at t.cpp:6, address = 0x0000000000400e5e
(lldb) r
Process 150 launched: ‘/root/a.out’ (x86_64)
Process 150 stopped
thread #1: tid = 150, 0x0000000000400e5e a.outmain + 94 at t.cpp:6, name = 'a.out', stop reason = breakpoint 1.1 frame #0: 0x0000000000400e5e a.outmain + 94 at t.cpp:6
3 using namespace std;
4 int main() {
5 string s = “aa”;
→ 6 cout << s;
7 }
(lldb) p s
(std::__1::string) $0 = {}
Could you please help point out what’s wrong in my env? Thanks.
- could you paste the output of "frame variable --raw-output s"? (This
disables lldb's type formatters. The goal is to see if the problem is
in the formatter, or in lldb not finding the variable in the first
place).
- could you compile your test executable with -fno-limit-debug-info
and see if that helps?
Yes the debug info does get bigger. But this is better than having the compiler omit the "std::string" definition so that you can't view stuff from the STL.