当我运行GDB针对加载链接到pthread的.so的程序时,GDB报告错误“无法find新线程:一般错误”。
请注意,我运行的可执行文件不与pthreads链接。
任何线索?
$ gdb --args lua -lluarocks.require GNU gdb(GDB)7.0-ubuntu Copyright(C)2009 Free Software Foundation,Inc. 许可证GPLv3 +:GNU GPL版本3或更高版本 这是免费软件:您可以自由更改和重新分配它。 没有担保,在法律允许的范围内。 键入“显示复制” 和“显示保修”的细节。 这个GDB被configuration为“x86_64-linux-gnu”。 有关错误报告的说明,请参阅: <http://www.gnu.org/software/gdb/bugs/> ... 读取/usr/bin/lua...中的符号(没有finddebugging符号)...完成。 (gdb)运行 启动程序:/ usr / bin / lua -lluarocks.require Lua 5.1.4版权所有(C)1994-2008 Lua.org,PUC-Rio >要求'ev' [使用libthread_db启用线程debugging] 找不到新线程:一般错误 (gdb)q debugging会话处于活动状态。 劣等1 [过程4986]将被杀死。 退出吗? (y或n)y
这个函数被调用require 'ev'
:
http://github.com/brimworks/lua-ev/blob/master/lua_ev.c#L25-65
有关我的系统的其他信息:
$ uname -a Linux localhost 2.6.31-20-generic#58-Ubuntu SMP Fri Mar 12 04:38:19 UTC 2010 x86_64 GNU / Linux
$ lsb_release -a 没有LSB模块可用。 经销商ID:Ubuntu 说明:Ubuntu 9.10 发行:9.10 代号:业力
这也适用:
LD_PRELOAD = / lib / libpthread.so.0 gdb –args ./app
64位的Ubuntu用户应该这样做:
LD_PRELOAD=/lib/x86_64-linux-gnu/libpthread.so.0 gdb --args ./app
您也可以在包含以下文本的主目录中创建.gdbinit
:
set env LD_PRELOAD /lib/libpthread.so.0
看起来,GDB不喜欢应用程序“突然”变得依赖于pthreads。
我发现唯一的解决方法是链接主机应用程序与pthreads。
这很伤心…
我已经发现gdb可以连接到pthreads库的运行时完成后附加到进程。
“如果在链接要调试的应用程序时添加标志-lpthread到gcc(或g ++),问题就会消失。 资源