GDB: не удается найти новые темы: общая ошибка - PullRequest
28 голосов
/ 24 апреля 2010

Когда я запускаю 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

Ответы [ 6 ]

29 голосов
/ 02 ноября 2010

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

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

27 голосов
/ 21 мая 2011

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

LD_PRELOAD=/lib/x86_64-linux-gnu/libpthread.so.0 gdb --args ./app
14 голосов
/ 07 июня 2011

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

set env LD_PRELOAD /lib/libpthread.so.0
6 голосов
/ 29 апреля 2010

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

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

Что довольно печально ...

5 голосов
/ 29 сентября 2010

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

2 голосов
/ 03 сентября 2013

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

...