我写了一个很大的程序,我收到了共享库test.so来测试它。启动它之后,通过了很多测试,但某个地方却被卡住了。它不断显示错误消息:“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.
它没有给我什么
当我写回溯时,我得到了类似的东西:
#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 ()
它也没有给我任何东西。
下一个解决方案是将断点放在所有函数上并将输出写入文件以便我有程序流,但我不知道如何自动化gdb problam以便它自己编写“continue”函数以便转到下一个功能。
如何找到故障排除功能?
非常感谢您的任何建议!
答案 0 :(得分:1)
您的问题是您没有使用调试信息编译您的test.so。
在你的回溯中,第0-8帧都来自libstdc ++或libc。第9帧是第一帧来自你的程序 - 但由于它没有debuginfo,即使你走到那个框架,你也不会发现任何有趣的东西。
修复方法是使用-g。
重新编译