The OpenNET Project / Index page

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

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

"Помогите отладить..."
Сообщение от ki11er emailИскать по авторуВ закладки on 11-Июл-02, 17:42  (MSK)
Есть не очень сложная многопоточная программа. Работает под Win и Linux. Под Win все проверено/перепроверено. Никаких утечек и т.д. и т.п. Работает как часы. Под Linux'ом - сваливается. Причем в gdb не могу причину установить ;-)

---Type <return> to continue, or q <return> to quit---Program received signal SIGSEGV, Segmentation fault.0x0 in ?? ()(gdb) bt#0  0x0 in ?? ()#1  0x804dd82 in txList::_at_ (this=0xbffffd20, i=0) at txlist.cxx:52#2  0x80495c8 in main (argc=2, argv=0xbffffd64) at ../layer1/inc/txlist.h:115(gdb)

Вот код:

const txListNode* txList::_at_ (int i) const
{
if (i >= entries())  /* !!! Строка 52 */
{
return 0;
}

register txListNode* node = _head_._next;

while (i--)
{
node = node->_next;
}

return node;
}

int entries (void) const
{
return _entries_;
}

Похоже, что стек разрушается, т.к.:

(gdb) disass $eip $eip+20
Dump of assembler code from 0x0 to 0x14:
0x0:    Cannot access memory at address 0x0.
(gdb)

Но как найти _ГДЕ_ ?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

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

1. "RE: Помогите отладить..."
Сообщение от genie Искать по авторуВ закладки on 12-Июл-02, 04:32  (MSK)
Naskol'ko ya ponimau, entries - eto kolichestvo elementov v spiske. No v multithreaded environment eto kolichestvo mozhet pomenyat'sya iz drugogo thread. Poetomu (ya dazhe ne govoru o locking) - luchshe sdelat' tak:
while(i-- && node) { node=node->_next; }

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: Помогите отладить..."
Сообщение от ki11er emailИскать по авторуВ закладки on 12-Июл-02, 13:36  (MSK)
>Naskol'ko ya ponimau, entries - eto kolichestvo elementov v spiske. No v
>multithreaded environment eto kolichestvo mozhet pomenyat'sya iz drugogo thread. Poetomu (ya
>dazhe ne govoru o locking) - luchshe sdelat' tak:
>while(i-- && node) { node=node->_next; }

Этот список заполняется только один раз при старте программы из основного треда и периодически читается только из этого же треда.


  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

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




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

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