我有这个简单的 C++ 代码:

#include<bits/stdc++.h>

using namespace std;
vector<string> q;

int main()
{
    q.push_back("test1");
    q.push_back("test2");
    cout<<q.front();
    return 0;
}

当我使用 gdb 打印变量 q 时,出现以下错误:
No symbol "q" in current context.

我使用 g++ 编译我的程序,如下所示:
 g++ -g a.cpp

这是我的 gdb 命令:
gdb a.out
GNU gdb (GDB) 7.12
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from a.out...done.
(gdb) b 6
Breakpoint 1 at 0x400c6f: file a.cpp, line 6.
(gdb) r
Starting program: /home/mohammad/Desktop/a.out

Breakpoint 1, main () at a.cpp:9
9       q.push_back("test");
(gdb) print q
No symbol "q" in current context.

最佳答案

这个问题与新的 gcc Dual ABI introduced in gcc 5 有某种关系。
gdb 对这些新的 C++11 ABI 标签的支持很差。例如,请参阅这些错误:

  • https://sourceware.org/bugzilla/show_bug.cgi?id=19436
  • https://sourceware.org/bugzilla/show_bug.cgi?id=18601

  • 作为一种解决方法,您可以通过使用 -D_GLIBCXX_USE_CXX11_ABI=0 进行编译来禁用这个新的 gcc ABI:
    g++ -D_GLIBCXX_USE_CXX11_ABI=0 -g a.cpp
    

    10-08 11:06
    查看更多