Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Отладка многопоточных приложений

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

WiseAlex



Софтовых дел М...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть многопоточное приложение на VC++ (работает с аппаратурой и передает результаты по сокетам клиентам)
1)
Хотелось бы найти ПО которое позволяет :
    При зависании программы (возможно из-за взаимной блокировки) остановить программу и посмотреть точки зависания/останова во всех потоках
 
2)
Может ли влиять на стабильность работы вывод в файл из разных потоков без использования синхронизирующих объектов, например
cerr<<"something"; или SomeOutputStream<<"Something";

Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 12:07 02-09-2004 | Исправлено: WiseAlex, 15:34 02-09-2004
CamTracer

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
NuMega SoftICE не пробовал?
А синхронизировать по-любому надо. Хотя бы из соображений корректности проектирования проги.

Всего записей: 264 | Зарегистр. 07-07-2004 | Отправлено: 12:40 03-09-2004
Arion



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Может ли влиять на стабильность работы вывод в файл из разных потоков без использования синхронизирующих объектов

На стабильность - вряд ли, но если два потока одновременно захотят вывести информацию в один файл, результат предсказать достаточно трудно. Если речь идет о записи логов и пр. в этом духе, я бы сделал отдельный поток, и передавал в него сообщения например через порт завершения ввода-вывода.


----------
Хачу роботать каректором арфаграфии

Всего записей: 436 | Зарегистр. 29-06-2003 | Отправлено: 13:05 03-09-2004
WiseAlex



Софтовых дел М...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CamTracer

Цитата:
А синхронизировать по-любому надо

Вопрос по стабильности - про корректность в курсе

Цитата:
NuMega SoftICE не пробовал?  

пока нет  
 
Arion

Цитата:
На стабильность - вряд ли

это понимать как с вероятностью 99,99%?

Цитата:
Если речь идет о записи логов и пр

да

Цитата:
сообщения например через порт завершения ввода-вывода.

можно пояснить?

Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 14:47 03-09-2004 | Исправлено: WiseAlex, 14:47 03-09-2004
mxm1975



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
несколько не в тему, возможно, но...
есть неплохое средство для анализа многопоточных программ
называется VTune. попробуйте.
 
http://www.intel.com/software/products/vtune/

Всего записей: 279 | Зарегистр. 31-07-2002 | Отправлено: 15:22 03-09-2004
WiseAlex



Софтовых дел М...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mxm1975
В принципе у меня есть BoundsChecker и Profiler, но за совет спасибо - тем более, что давно собираюсь посмотреть на эту софтину

Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 16:46 03-09-2004
57DeD

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mxm1975
А ты его пробовал реально или только слышал? Я пока отзывы собираю -- что скажешь?

Всего записей: 61 | Зарегистр. 18-09-2003 | Отправлено: 08:09 04-09-2004
odl455



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WiseAlex
 

Цитата:
При зависании программы (возможно из-за взаимной блокировки) остановить программу и посмотреть точки зависания/останова во всех потоках  

 
Любой отладчик для этой цели подойдёт. Можно Softice, можно WinDbg. Можно и без отладчиков если приложение создаёт отладочные лог-файлы.
 

Цитата:
Может ли влиять на стабильность работы вывод в файл из разных потоков без использования синхронизирующих объектов, например  
cerr<<"something"; или SomeOutputStream<<"Something";  

 
Нас табильность не может. Просто в этом случае неизвестно какое сообщение запишется первым, какое последним. А могут и вообще в перемешку - половина первого, половина второго, вторая часть первого, вторая часть второго.

Всего записей: 659 | Зарегистр. 26-08-2002 | Отправлено: 08:16 04-09-2004
mxm1975



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
57DeD

Цитата:
А ты его пробовал реально или только слышал? Я пока отзывы собираю -- что скажешь?

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

Всего записей: 279 | Зарегистр. 31-07-2002 | Отправлено: 03:38 05-09-2004
segeich

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WiseAlex

Цитата:
Хотелось бы найти ПО ...

Зачем его искать? Встроенный в VC++ отладчик все это умеет.
в меню: Debug / Break, Debug / Threads

Всего записей: 112 | Зарегистр. 03-01-2003 | Отправлено: 01:46 06-09-2004
Arion



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
можно пояснить?

 
Да конечно:
В своей программе мы создаем отдельный поток, осуществляющий запись в лог:

Код:
 
#define CK_STOP 0x01
#define CK_MESSAGE 0x02
HANDLE hPort;
DWORD WINAPI _tLogWrite(PVOID pvContext)
{
//Создаем порт завершения ввода-вывода
hPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL,0,0);
DWORD dwMsg = 0;
while(dwMsg!=CK_STOP)
{
 OVERLAPPED* po;
 DWORD dwNBT;
//Получаем сообщение
 BOOL bResult = GetQueuedCompletionStatus(hPort,&dwNBT,&dwMsg,&po,INFINITE);
//Дальше пишем в лог и пр пр.
}
CloseHandle(hPort);
}
 

 
В любом месте программы, где нам нужно записать что либо в лог мы вызываем функцию PostQueuedCompletionStatus, передавая в нее код CK_MESSAGE. По хорошему все это оформляется в виде одного хорошего класса. Более подробно можно посмотреть у Рихтера в книжке "Создание серверных приложений для Windows 2000"

----------
Хачу роботать каректором арфаграфии

Всего записей: 436 | Зарегистр. 29-06-2003 | Отправлено: 07:35 06-09-2004
OldGopher



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Все это верно, при условии, что зависание локальное, а не системное (на уровне ядра).
Иначе, Вам, может быть, поможет только хардовый отладчик, типа Microsoft PCI Dump Switch.
Или нужна доска с ISA слотом, что, в свете новых стандартов, несколько проблематично.
 
Кроме того, многопоточные приложения и драйверы практически бессмысленно отлаживать на однопроцессорных системах. Нужна, на худой конец, НТ-система, или, лучше, SMP...


----------
Женщина - это такая баба, с которой хочется заняться сексом немедленно... (с) 2006

Всего записей: 3802 | Зарегистр. 25-10-2001 | Отправлено: 09:21 06-09-2004
WiseAlex



Софтовых дел М...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
odl455

Цитата:
Нас табильность не может. Просто в этом случае неизвестно какое сообщение запишется первым, какое последним.

Очередность не имееет большого значения, самое главное чтобы не навернулось
segeich

Цитата:
Зачем его искать? Встроенный в VC++ отладчик все это умеет.  
в меню: Debug / Break, Debug / Threads  

Согласен - это я с горяча (4 дня отладки, а в конце оказалось - не те номиналы резисторов на подключенном оборудовании, что с течением времени приводило к полной глючности). Сейчас разобрался, заодно почитал великолепную книгу Debugging Applications for Microsoft .NET and Microsoft Windows
Arion
Я так понял этот способ работает только для Win200 и выше, у меня требования на работоспособность в 98 тоже
OldGopher
Сразу чувствуется опыт - я про такие названия почти и не слышал...
---------
Спасибо всем за участие
---------
В продолжение темы (или лучше отдельный топик?)
в книге Debugging Applications for Microsoft .NET and Microsoft Windows указано на то, что поставляемая с VC++ STL имеет один общий расперелитель памяти на все потоки, что может сильно влиять на быстродействие и рекомдуется использовать STLPort,
Насколько я знаю с VC поставляется STL от dinkumware, существует еще и многопоточная реализация STL от dinkumware (правда она платная)
1) Есть какие-то более-менее объективные тесты библиотек в многопоточных приложениях
2) Есть ли личные впечатления от работы с ними ?

Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 10:47 06-09-2004 | Исправлено: WiseAlex, 10:47 06-09-2004
segeich

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Arion
Порты завершения это имхо уже перебор для записи логов.
Достаточно обернуть записи в лог критической секцией например.
 
OldGopher
Многие проблемы (вроде взаимной блокировки потоков) можно и на однопроцессорной системе словить.
Хотя согласен, если прога хорошо работает на однопроцессорной системе, то еще не факт, что она будет на многопроцессорной работать. И по-хорошему, под SMP нужно тестить отдельно. Только не всегда (не у всех) такая машина есть

Всего записей: 112 | Зарегистр. 03-01-2003 | Отправлено: 13:24 06-09-2004
WiseAlex



Софтовых дел М...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
segeich

Цитата:
Только не всегда (не у всех) такая машина есть  

факт

Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 13:34 06-09-2004
segeich

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WiseAlex

Цитата:
поставляемая с VC++ STL имеет один общий расперелитель памяти на все потоки, что может сильно влиять на быстродействие и рекомдуется использовать STLPort

Прежде чем тратить время на поиски альтернативы и переделку кода, неплохо бы сначала доказать её необходимость для конкретно твоей программы с помощью profile'а.
Иначе ты рискуешь потратить много времени и усилий, а в результате получить прирост в жалких 2-3%.

Всего записей: 112 | Зарегистр. 03-01-2003 | Отправлено: 14:02 06-09-2004
WiseAlex



Софтовых дел М...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
segeich
Абсолютно согласен. Но для понимания проблемы и составления своего мнения хотелось бы посмотреть на тесты и т.д.
Кстати по профайлеру я пользуюсь DevPartner'овскисм и возникла проблема с быстродействием (приложение работает с оборудованием и критично ко времени, поэтому результаты не корректны из-за потери данных) - я не слишком разбирался с настройками, но хотелось бы прояснить:
1)это проблема профайлера или настроек  
2) поможет ли VTune
комп - AthlonXP2000 512MB на nForce2

Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 15:15 06-09-2004
OldGopher



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Я уже года два пытаюсь соорудить Dump Switch по рецепту Microsoft.  
Люди говорят, что рецепт неполный - не хватает двоичной программы логической матрицы. Кто-нибудь знает, где ее взять и надо ли вообще?
 
Сам рецепт здесь:
http://www.microsoft.com/whdc/system/CEC/dmpsw.mspx
 
 
Добавлено
Выяснил наконец. Всякий, кому надо NMI Dump switch для хардовой отладки, должен позвонить на Microsoft и попросить код для PAL матрицы. А они там решат, кому давать, кому нет...

----------
Женщина - это такая баба, с которой хочется заняться сексом немедленно... (с) 2006

Всего записей: 3802 | Зарегистр. 25-10-2001 | Отправлено: 17:07 06-09-2004
segeich

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WiseAlex

Цитата:
1)это проблема профайлера или настроек  

Сложно сказать, не зная насколько критична для проги работа с оборудованием и потеря данных. Очевидно, что профайлер тормозит прогу, причем тем сильнее, чем глубже задан уровень профилирования. Так что от настроек зависит напрямую.
 
Могу ошибаться, но потеря данных не должна особо влиять на результаты профилирования. Тебе ведь важно не то, как долго работает программа, а сколько те или иные части программы отжирают процентов по времени выполнения и какие куски самые прожорливые (первые кандидаты на оптимизацию), и есть ли среди них распределитель памяти
 

Цитата:
2) поможет ли VTune  

Сам не пользовался, но вроде бы VTune заточен под Intel'овские процессоры?  
Мне хватает VC++ profiler и Rational Quantify.

Всего записей: 112 | Зарегистр. 03-01-2003 | Отправлено: 19:04 06-09-2004
WiseAlex



Софтовых дел М...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
segeich

Цитата:
VC++ profiler  

насколько я понял кухню в VC7.0 и выше нет встроенного профайлера

Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 19:18 06-09-2004
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Отладка многопоточных приложений


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru