Хобрук: Ваш путь к мастерству в программировании

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

  • Думаю, это может быть связано: thread.gmane.org/gmane.comp.gdb .devel / 24205 Есть ли обходные пути? 24.04.2010
  • Спасибо за вопрос ... В моей системе ubuntu я не мог заставить работать предварительную загрузку /usr/lib/i386-linux-gnu/libpthread.so, поэтому я скомпилировал Lua с помощью pthread ... ;-(. 05.03.2012

Ответы:


1

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

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

02.11.2010

2

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

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

3

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

set env LD_PRELOAD /lib/libpthread.so.0
07.06.2011

4

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

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

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

29.04.2010
  • Когда вы говорите «внезапно», вы имеете в виду динамическую загрузку во время выполнения? 21.09.2010
  • Это также решило мою проблему, мои статические / разделяемые библиотеки зависят от pthread, но не от моего исполняемого файла, поэтому я не связываю его. Однако после связывания отладчик ведет себя правильно ... Я должен упомянуть, что мое приложение не создает никаких потоков, однако он может создавать объекты в локальной памяти потока. 21.09.2010
  • @Hassan: да, вдруг = динамическая загрузка 21.09.2010

  • 5

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

    29.09.2010
  • Иногда перекомпиляция - нереальный вариант, поэтому подключение после, вероятно, является более общим решением. Спасибо, эта ветка решила мою проблему. 26.10.2010

  • 6

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

    03.09.2013
  • Что ж, это примерно то, что я написал в качестве ответа три года назад: единственный обходной путь, который я нашел, - это связать хост-приложение с pthreads. ;) 03.09.2013
  • Новые материалы

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...