The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Загадочная отладка многопоточности в gdb..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Загадочная отладка многопоточности в gdb..." 
Сообщение от Serega_S emailИскать по авторуВ закладки(??) on 07-Мрт-05, 17:49  (MSK)
Всем привет!
Вот такая вот странность: При отладке даже примитивного многопоточного приложения:
      1 #include <stdio.h>
      2 #include <pthread.h>
      3 #define log_on 1
      4
      5 void* potok(void*);
      6
      7 int main(int argv,char**argc)
      8 {
      9     printf("?????");
     10     pthread_t handl;
     11
     12     if(pthread_create(&handl,0,&potok,0))
     13         puts("\nerror\n");
     14     return 0;
     15 }
     16
     17 void* potok(void*uk)
     18 {
     19     puts("\n?????");
     20     return (void*)0;
     21 }

  начали вываливаться такие ошибки:

(gdb) b 14
Breakpoint 1 at 0x804852d: file main.cpp, line 14.
(gdb) b potok(void*)
Breakpoint 2 at 0x804853a: file main.cpp, line 19.
(gdb) r
Starting program: /data/work/Linux/work_c/tcp/temp/main

Program received signal SIG32, Real-time event 32.
0x4017d2e1 in sigpending () from /lib/libc.so.6
(gdb) n
Single stepping until exit from function sigpending,
which has no line number information.
0x40028ec0 in pthread_yield () from /lib/libpthread.so.0
(gdb) n
Single stepping until exit from function pthread_yield,
which has no line number information.
0x40025649 in pthread_getattr_np () from /lib/libpthread.so.0
(gdb) n
Single stepping until exit from function pthread_getattr_np,
which has no line number information.
0x40028ece in pthread_yield () from /lib/libpthread.so.0
(gdb) n
Single stepping until exit from function pthread_yield,
which has no line number information.
0x400297e0 in pthread_getconcurrency () from /lib/libpthread.so.0
(gdb) n
Single stepping until exit from function pthread_getconcurrency,
which has no line number information.
0x40025649 in pthread_getattr_np () from /lib/libpthread.so.0
(gdb) n
Single stepping until exit from function pthread_getattr_np,
which has no line number information.
0x400297f0 in pthread_getconcurrency () from /lib/libpthread.so.0
(gdb)
и т.д. В чём странность - непонятно. При запуске вне gdb - всё работает нормально. В чём может быть проблема? Хотя проблема-то видна... :-) Но что енто значит?

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Загадочная отладка многопоточности в gdb..." 
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 07-Мрт-05, 17:59  (MSK)
Похоже на глюки отладчика. Обычно проявляются, скажем, в Linux,
когда glibc сильно старая, а ядро сильно новое.

На всякий случай - `info threads` и `bt` для текущего потока
в студию.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Загадочная отладка многопоточности в gdb..." 
Сообщение от Serega_S emailИскать по авторуВ закладки(??) on 08-Мрт-05, 04:49  (MSK)
Вот:
(gdb) b 14
Breakpoint 1 at 0x804852d: file main.cpp, line 14.
(gdb) b potok(void*)
Breakpoint 2 at 0x804853a: file main.cpp, line 19.
(gdb) r
Starting program: /data/work/Linux/work_c/tcp/temp/main

Program received signal SIG32, Real-time event 32.
0x4017d2e1 in sigpending () from /lib/libc.so.6
(gdb) n
Single stepping until exit from function sigpending,
which has no line number information.
0x40028ec0 in pthread_yield () from /lib/libpthread.so.0
(gdb) info threads
(gdb) info threads
(gdb) bt
#0  0x40028ec0 in pthread_yield () from /lib/libpthread.so.0
#1  0x4017d3a7 in sigsuspend () from /lib/libc.so.6
#2  0x40029258 in pthread_getconcurrency () from /lib/libpthread.so.0
#3  0x40028ac5 in pthread_create () from /lib/libpthread.so.0
#4  0x08048516 in main (argv=1, argc=0xbffff644) at main.cpp:12
(gdb)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Загадочная отладка многопоточности в gdb..." 
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 08-Мрт-05, 11:15  (MSK)
Из напечатанного видно, что оный странный сигнал прилетает в момент
попытки создания потока.

То, что info threads ни шиша не печатает, наводит на своеобразные
мысли. Поэтому впрос из разряда дурацких: употребляется ли ключик
`-pthread` при компиляции?

Ещё возникает подозрение, что отладчик собран без поддержки средств
отладки многопоточных программ. Либо просто собран криво. Можно
попробовать собрать из сорсов, причём тщательно проверить вывод
`configure`.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Загадочная отладка многопоточности в gdb..." 
Сообщение от Serega_S emailИскать по авторуВ закладки(??) on 08-Мрт-05, 18:17  (MSK)
>Из напечатанного видно, что оный странный сигнал прилетает в момент
>попытки создания потока.
>
>То, что info threads ни шиша не печатает, наводит на своеобразные
>мысли. Поэтому впрос из разряда дурацких: употребляется ли ключик
>`-pthread` при компиляции?
>
>Ещё возникает подозрение, что отладчик собран без поддержки средств
>отладки многопоточных программ. Либо просто собран криво. Можно
>попробовать собрать из сорсов, причём тщательно проверить вывод
>`configure`.

Программа собрана нормально, с -lpthread, на соседней машине (ASP 9.2) всё отлаживается нормально. Дебаггер из дистрибутива (Слакваре 10.0). Ставил со Слакваре 9.0 - всё равно не работает (поведение то же), хотя когда у меня стаяла Слакварь 9.0 - прога отлаживалась "на-ура". Похоже это в дистре... Но у людей-то наверно работает... :-( Причём ведь на дефолтном ядре - та же история...

PS: то что info threads не печатает, это т.к. оно похоже вывалилось, не создав потока похоже...

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Загадочная отладка многопоточности в gdb..." 
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 08-Мрт-05, 22:03  (MSK)
>Программа собрана нормально, с -lpthread, на соседней машине (ASP 9.2)

При компиляции (не при линковке) `-pthread` выставлен? Не `-lpthread`,
а `-pthread` - разные это вещи.

>PS: то что info threads не печатает, это т.к. оно похоже вывалилось,
>не создав потока похоже...

Главный поток должно было напечатать.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Загадочная отладка многопоточности в gdb..." 
Сообщение от Serega_S emailИскать по авторуВ закладки(??) on 09-Мрт-05, 09:10  (MSK)
>При компиляции (не при линковке) `-pthread` выставлен? Не `-lpthread`,
>а `-pthread` - разные это вещи.

Пропробовал - то же самое:

bash-2.05b$ make
g++ -g3 -c -pthread main.cpp -o main.o
g++ -g3  -lpthread main.o -o main
bash-2.05b$ gdb mai
main      main.cpp  main.o    
bash-2.05b$ gdb main
GNU gdb 5.3
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-slackware-linux"...
(gdb) b 14
Breakpoint 1 at 0x804852d: file main.cpp, line 14.
(gdb) b potok(void*)
Breakpoint 2 at 0x804853a: file main.cpp, line 19.
(gdb) r
Starting program: /data/work/Linux/work_c/tcp/temp/main

Program received signal SIG32, Real-time event 32.
0x4017d2e1 in sigpending () from /lib/libc.so.6
(gdb) info threads
(gdb)

   Да и раньше оно без этой опции работало (на 9.0 слакваре), да и сейчас всё нормально отлаживается на ASP 9.2, а вот на 10-й слаке такие странности.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Загадочная отладка многопоточности в gdb..." 
Сообщение от Serega_S emailИскать по авторуВ закладки(??) on 08-Мрт-05, 04:52  (MSK)
>Похоже на глюки отладчика. Обычно проявляются, скажем, в Linux,
>когда glibc сильно старая, а ядро сильно новое.
>
>На всякий случай - `info threads` и `bt` для текущего потока
>в студию.

В догонку:
Ядро 2.4.29
glibc 2.3.3
Slackware 10.0


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Загадочная отладка многопоточности в gdb..." 
Сообщение от Serega_S emailИскать по авторуВ закладки(??) on 08-Мрт-05, 08:21  (MSK)
>>Похоже на глюки отладчика. Обычно проявляются, скажем, в Linux,
>>когда glibc сильно старая, а ядро сильно новое.
>>
>>На всякий случай - `info threads` и `bt` для текущего потока
>>в студию.
>
>В догонку:
>Ядро 2.4.29
>glibc 2.3.3
>Slackware 10.0

Ссори - glibc 2.3.2

Проверил на дефолтном для 10 Слаки ядре - то же самое. поставил постарше дебаггер (5-й, у меня 6-й) - то же самое. На ASP 9.2 glibc 2.3.2 ядро 2.4.22 - всё работает нормально... Вот и думаю - что делать?!

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "Загадочная отладка многопоточности в gdb..." 
Сообщение от rgo Искать по авторуВ закладки on 15-Мрт-05, 06:10  (MSK)
А чёрт знает что такое. У меня Slackware 10 + ядро 2.6.9 --- тоже самое. Но поток то запускается! Просто из pthread_create не выйти под дебуггером.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "Загадочная отладка многопоточности в gdb..." 
Сообщение от rgo Искать по авторуВ закладки(ok) on 15-Мрт-05, 07:52  (MSK)
В доках про gdb написано, ежели info threads ничего не пишет ==> нету поддержки threads (надо перекомпилять gdb)
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

11. "Загадочная отладка многопоточности в gdb..." 
Сообщение от Serega_S emailИскать по авторуВ закладки(??) on 15-Мрт-05, 18:01  (MSK)
>А чёрт знает что такое. У меня Slackware 10 + ядро 2.6.9
>--- тоже самое. Но поток то запускается! Просто из pthread_create не
>выйти под дебуггером.

Нашёл в чём бага! :-) Побродил по буржуйским сайтам и нашёл. В общем проблема в том, что в слаке по-умолчанию из glibc-ов после сборки удаляется отладочная информация, что уменьшает размер библиотек. Этим занимается утилита strip <файл>. чтобы проверить есть ли там инфа нужно дать команду - для нашего случая к примеру:
  file /lib/libpthread*
Если там будет наличиствовать 'stripped' то тогда проблема есть, и надо компилить с сырцов. Но при этом надо поправить build-скрипт и закомментить там strip команды.
Вроде как, для этих целей служит glibc-debug, но там тоже stripped... :-(

ЗЫ: пересобрал glibc-ы по пофикшенному скрипту (заодно под камешек свой) и всё наконец-то заработало. Чего и вам желаю! :-)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру