[sisyphus] C++ & gdb

Sergey Vlasov =?iso-8859-1?q?vsu_=CE=C1_altlinux=2Eru?=
Вт Сен 24 18:00:41 MSD 2002


On Tue, 24 Sep 2002 13:52:31 +0400
"Dmitry V. Levin" <ldv на altlinux.org> wrote:

> On Mon, Sep 23, 2002 at 10:57:18PM +0300, Sanja Byelkin wrote:
> > Доброе (РЕАЛЬНО!!!) время суток!
> > 
> > On Mon, Sep 23, 2002 at 10:26:24PM +0400, Dmitry V. Levin wrote:
> > [skip]
> > > Удалось воспроизвести.
> > > 
> > > Workaround:
> > > 1. установить пакет glibc-core-debug и
> > > 2. запускать gdb/ddd с LD_LIBRARY_PATH=/usr/lib/debug
> > 
> > _ОГРОМНОЕ_ спасибо! это действительно помогло (осталось только подумать как
> > это пристроить удобнее - но это уже детали)
> 
> Честно говоря, мне пока что не ясно, почему эту нужно делать для
> многопоточных программ (для обычных - не нужно).
> Возможно, в по'strip'анном libpthread удалена какая-то важная для gdb
> информация. Если кто-нибудь в курсе, напишите.

Я, кажется, понял, в чем дело. В gdb поддержка потоков теперь сделана
через libthread_db.so.1 (linuxthreads_db в glibc), а там в коде можно
обнаружить, например, следующее:

  /* Get the global event mask.  This is one of the variables which
     are new in the thread library to enable debugging.  If it is
     not available we cannot debug.  */
  if (ps_pglobal_lookup (ps, LIBPTHREAD_SO,
			 "__pthread_threads_events", &addr) != PS_OK)
    return TD_NOLIBTHREAD;

Символ __pthread_threads_events встречается в libpthread.so.0 только в
отладочной информации - он не экспортируется (и правильно - программам,
кроме отладчика, нечего делать в этих внутренностях). Есть еще несколько
аналогичных символов. Поэтому после отрезания отладочной информации
libthread_db.so.1 просто не видит потоков.

В сборке glibc-2.2.5-alt12 (Master updates) /lib/libpthread.so.0
содержит отладочную информацию, поэтому там эта проблема не возникает
(если только не добавить к нему glibc-core-i686 из Сизифа - там
/lib/i686/libpthread.so.0 обрезанный).
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/sisyphus/attachments/20020924/32927eae/attachment-0011.bin>


Подробная информация о списке рассылки Sisyphus