Подтвердить что ты не робот

Gdb: Не удается найти новые потоки: общая ошибка

Когда я запускаю GDB против программы, которая загружает .so, которая связана с 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
4b9b3361

Ответ 1

Это также работает:

LD_PRELOAD =/lib/libpthread.so.0 gdb --args./app

Ответ 2

64-разрядные пользователи Ubuntu должны сделать это:

LD_PRELOAD=/lib/x86_64-linux-gnu/libpthread.so.0 gdb --args ./app

Ответ 3

Вы также можете создать .gdbinit в своем домашнем каталоге, содержащем этот текст:

set env LD_PRELOAD /lib/libpthread.so.0

Ответ 4

Похоже, что GDB не нравится, когда приложение "внезапно" становится зависимым от pthreads.

Единственное обходное решение, которое я нашел, - связать хост-приложение с pthreads.

Это довольно грустно...

Ответ 5

Я обнаружил, что gdb может присоединяться к процессу после того, как завершена компоновка времени выполнения, связанная с библиотекой pthreads.

Ответ 6

"Если вы добавляете флаг -lpthread в gcc (или g++) при связывании приложения для отладки, проблема исчезает." Source