C++ 用gdb调试共享库

C++ 用gdb调试共享库,c++,gdb,C++,Gdb,我写了一个相当大的程序,我收到了共享库测试。所以我要测试它。在启动它之后,很多测试都通过了,但在某些地方它被卡住了。它不断显示错误消息:“ERR 65”,可能由test.so提供,而不是由gdb提供。 当我试着把断点放在某个地方时,总是有太多的代码要处理,以至于我无法找到麻烦制造函数 当我单击ctrl+c将其停止时,我得到了一个写入步骤: _IO_new_file_write (f=0x2aaaab7b7280 <_IO_2_1_stdout_>, data=<optimize

我写了一个相当大的程序,我收到了共享库测试。所以我要测试它。在启动它之后,很多测试都通过了,但在某些地方它被卡住了。它不断显示错误消息:“ERR 65”,可能由test.so提供,而不是由gdb提供。 当我试着把断点放在某个地方时,总是有太多的代码要处理,以至于我无法找到麻烦制造函数

当我单击ctrl+c将其停止时,我得到了一个写入步骤:

_IO_new_file_write (f=0x2aaaab7b7280 <_IO_2_1_stdout_>, data=<optimized out>, n=17) at     
fileops.c:1263
1263    fileops.c: No such file or directory.
\u IO\u new\u file\u write(f=0x2aaab7b7280,data=,n=17)位于
文件OPS.c:1263
1263 fileops.c:没有这样的文件或目录。
它什么也没给我 当我写回溯时,我得到了这样的结果:

#0  0x00002aaaab4e1700 in __write_nocancel () at ../sysdeps/unix/syscall-template.S:81
#1  0x00002aaaab46f243 in _IO_new_file_write (f=0x2aaaab7b7280 <_IO_2_1_stdout_>, data=        
<optimized out>, n=17) at fileops.c:1262
#2  0x00002aaaab46f122 in new_do_write (fp=0x2aaaab7b7280 <_IO_2_1_stdout_>,         
data=0x2aaaaaad2000 "ERR 65: Za duzo.\n+ 15 elementow.\n elementow.\n\nin.\n", 
to_do=17) at fileops.c:538
#3  0x00002aaaab470855 in _IO_new_do_write (fp=<optimized out>, data=<optimized out>,         
to_do=17) at fileops.c:511
#4  0x00002aaaab46fac1 in _IO_new_file_xsputn (n=5, data=<optimized out>,     
f=0x2aaaab7b7280 <_IO_2_1_stdout_>) at fileops.c:1333
#5  _IO_new_file_xsputn (f=0x2aaaab7b7280 <_IO_2_1_stdout_>, data=<optimized out>, n=5)     
at fileops.c:1278
#6  0x00002aaaab464e15 in __GI__IO_fwrite (buf=<optimized out>, size=1, count=5,     
fp=0x2aaaab7b7280 <_IO_2_1_stdout_>) at iofwrite.c:43
#7  0x00002aaaaaf6fb45 in std::basic_ostream<char, std::char_traits<char> >&     
std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char,     
std::char_traits<char> >&, char const*, long) () from /usr/lib/x86_64-linux-    
gnu/libstdc++.so.6
#8  0x00002aaaaaf6fe07 in std::basic_ostream<char, std::char_traits<char> >&     
std::operator<< <std::char_traits<char> >(std::basic_ostream<char,     
std::char_traits<char> >&, char const*) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#9  0x00002aaaaacd73e7 in Test2() () from ./tests/ltest_liniowe2.so
#10 0x0000000000404eb6 in main ()
\0 0x00002AAAB4E1700 in\uu write\u nocancel()位于../sysdeps/unix/syscall template.S:81
#1 0x00002AAAB46F243在新文件中写入(f=0x2AAAB7B7280,数据=
,n=17)在fileops.c:1262
#2 0x00002AAAB46F122在新的写入中(fp=0x2AAAB7B7280,
data=0x2AAAAAD2000“错误65:Za duzo.\n+15 elementow.\n elementow.\n\n in.\n”,
to_do=17)在文件操作处。c:538
#3 0x00002AAAB470855输入输出新数据写入(fp=,数据=,
to_do=17)在文件操作c:511
#4 0x00002AAAB46FAC1在新文件中(n=5,数据=,
f=0x2aaab7b7280)在文件操作处。c:1333
#5个新文件(f=0x2AAAB7B7280,数据=,n=5)
见文件OPS.c:1278
#6 0x00002AAAB464E15英寸写入(buf=,大小=1,计数=5,
iofwrite.c:43处的fp=0x2AAAB7B7280)
#标准中的7 0x00002AAAAF6FB45::基本和
std::uuostream_insert(std::basic_ostream&,char const*,long)()来自/usr/lib/x86_64-linux-
gnu/libstdc++.so.6
#标准中的8 0x00002AAAAF6FE07:basic_ostream&

std::operator您的问题是您没有编译您的test.so和调试信息

在回溯中,帧0-8都来自libstdc++或libc。帧#9是程序中的第一个帧,但由于它没有debuginfo,即使您进入该帧,也不会发现任何有趣的内容

修复方法是使用-g重新编译