用于调试stdlib变量的Python漂亮打印机将无法正常工作

时间:2015-11-02 16:13:02

标签: python debugging printing gdb

我按照这篇文章以非常方式调试变量The value of strings doesn't appear in eclipse mars CDT

但是我最终收到如下错误消息:

 File "/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19-gdb.py", line 63, in <module>
    from libstdcxx.v6.printers import register_libstdcxx_printers
ImportError: No module named 'libstdcxx'

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您的.gdbinit看起来没有正确的内容,或者没有被运行。

确保添加的路径对于您的计算机是正确的,并且gdbinit文件正在运行。

由于您收到了该错误,因此只需要将正确的路径添加到python。

以下是首先不起作用的示例跟踪,然后在路径更正后再起作用:

$ cat hello.cc 
#include <string>
using namespace std;

int main() {
    string mystring = "my string here";
    return 0;
}

$ g++ hello.cc -g -o hello.elf

$ gdb hello.elf --quiet

Reading symbols from hello.elf...done.
(gdb) b hello.cc:6
Breakpoint 1 at 0x400863: file hello.cc, line 6.
(gdb) r
Starting program: /tmp/x/hello.elf 
Traceback (most recent call last):
  File "/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19-gdb.py", line 63, in <module>
    from libstdcxx.v6.printers import register_libstdcxx_printers
ImportError: No module named 'libstdcxx'

Breakpoint 1, main () at hello.cc:6
6       return 0;
(gdb) p mystring
$1 = {static npos = <optimised out>, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, 
    _M_p = 0x602028 "my string here"}}
(gdb) python
>import sys
>sys.path.insert(0, '/usr/share/gcc-4.8/python/')
>end
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /tmp/x/hello.elf 

Breakpoint 1, main () at hello.cc:6
6       return 0;
(gdb) p mystring
$2 = "my string here"
(gdb) 

以上示例的版本信息:

$ g++ --version
g++ (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ gdb --version
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
Copyright (C) 2014 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-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".

使用Eclipse CDT时

使用Eclipse CDT时,您需要手动指定gdbinit文件。 Eclipse CDT使用--nx标志启动GDB,这会阻止GDB自动获取任何.gdbinit个文件。您应该在启动配置中指定CDT适当的init文件:

gdbinit in cdt

此外,您可以在首选项中更改默认启动gdbinit以获取新的启动配置,如此对话框所示:

default gdb init