当我对一个加载了.so的程序运行GDB时,该程序链接到pthreads,GDB报告错误“无法找到新的线程:泛型错误”。
请注意,我运行的可执行文件未与pthreads链接。
任何线索?
$ gdb --args lua -lluarocks.require GNU gdb (GDB) 7.0-ubuntu Copyright (C) 2009 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later 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". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /usr/bin/lua...(no debugging symbols found)...done. (gdb) run Starting program: /usr/bin/lua -lluarocks.require Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio > require 'ev' [Thread debugging using libthread_db enabled] Cannot find new threads: generic error (gdb) q A debugging session is active. Inferior 1 [process 4986] will be killed. Quit anyway? (y or 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 No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 9.10 Release: 9.10 Codename: karmic
答案 0 :(得分:29)
这也有效:
LD_PRELOAD = / lib / libpthread.so.0 gdb --args ./app
答案 1 :(得分:27)
64位Ubuntu用户应该这样做:
LD_PRELOAD=/lib/x86_64-linux-gnu/libpthread.so.0 gdb --args ./app
答案 2 :(得分:14)
您还可以在主目录中创建包含此文本的.gdbinit
:
set env LD_PRELOAD /lib/libpthread.so.0
答案 3 :(得分:6)
当应用程序“突然”依赖于pthread时,GDB似乎不喜欢。
我发现的唯一解决方法是将主机应用程序与pthreads链接。
这很难过......
答案 4 :(得分:5)
我发现在链接到pthreads库的运行时完成后,gdb可以附加到进程。
答案 5 :(得分:2)
“如果在链接要调试的应用程序时将标志-lpthread添加到gcc(或g ++),问题就会消失。” Source