Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028

Как найти причину зависания программы?

24.10.2014, 23:03. Показов 4004. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программа изредка зависает, может зависнуть в момент включения, а может исправно работать весь день.
Запущен один постоянно работающий поток, прога содержит в себе одну стороннюю dll, из исходников которой есть только .h файл,
Причем, когда основная программа уже висит, поток исправно работает, можно поставить бряк и пройти пошагово, проблем нет, в то время как в программе не срабатывает ни один брейкпоинт, таймеры тоже стоят. Кнопка паузы останавливает на функции StartUserThread, дальше трассировать бесполезно, уходит в недры исправно работающего потока.
В окне Thread Status:
Status: Runnable
Wait Chain: Blocked on SendMessage call to a window owned by Thread 5632 (номер потока всегда разный)

В информации о потоке 5632, полученной с помощью программы ProcessExplorer, среди малозначащего мусора, содержится одна строка:
StartAddress: rtl140.bpl!@System@@Assert$qqrx20System@ UnicodeStringt1i+0x20

Что это и как бороться?

Добавлено через 6 минут
Если это важно, C++ Builder RAD Studio 2010, Windows 7 Ultimate x64
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.10.2014, 23:03
Ответы с готовыми решениями:

Помогите найти причину ошибки при компиляции программы со списком
По завершении компиляции выходит ошибка (выделено красным): Программа для реализации списка.

Определить причину зависания программы
Коротко о главном. Есть курсач на Exel VBA. Основной смысл программы: нужно отобрать по Группе задолжеников, вроде всё верно, начинает...

Определить причину зависания программы
Здравствуйте. Есть одна программа, зависающая через некоторое время после запуска. Понять, из-за чего она виснет я не могу, к тому же она...

10
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.10.2014, 23:08
Цитата Сообщение от +1 Посмотреть сообщение
StartAddress: rtl140.bpl!@System@@Assert$qqrx20System@ UnicodeStringt1i+0x20
Ну если это причина, то скорее всего что-то со строкой, например выход за границы/неверный индекс итп.
Цитата Сообщение от +1 Посмотреть сообщение
Wait Chain: Blocked on SendMessage call to a window owned by Thread 5632 (номер потока всегда разный)
А это видимо проблема с синхронизацией, возможно взаимная блокировка.

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

Добавлено через 4 минуты
А вторичный поток использует DLL ? Если да, то может DLL не рассчитана на многопоточную работу.
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
24.10.2014, 23:16  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
А вторичный поток использует DLL ?
Да, именно он и пользует. Сделал запись в лог файл до и после вызова функций этой dll, благо их используется всего 3 штуки, в результате в файле всегда записаны обе строки, следовательно возврат из функций проходит нормально.
Цитата Сообщение от Avazart Посмотреть сообщение
А это видимо проблема с синхронизацией, возможно взаимная блокировка.
У меня тоже есь подозрения, и что можно сделать?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.10.2014, 23:21
Цитата Сообщение от +1 Посмотреть сообщение
У меня тоже есь подозрения, и что можно сделать?
Подумать... и попробовать переделать.
Или выбросить и написать с нуля.

Мне от куда знать что у тебя за код и где у него могут быть блокировки и критические места?
Кстати у тебя случаем не виснит программа, если в момент работы потока взять начать и нервно дергать окно программы в разные стороны по экрану?

Добавлено через 2 минуты
Цитата Сообщение от +1 Посмотреть сообщение
Да, именно он и пользует. Сделал запись в лог файл до и после вызова функций этой dll, благо их используется всего 3 штуки, в результате в файле всегда записаны обе строки, следовательно возврат из функций проходит нормально.
Ну так вырежи вообще это кусок с DLL и тестируй, смотри будут ли подвисания.
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
25.10.2014, 04:06  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Или выбросить и написать с нуля.
Переписал. Не с нуля, конечно, но максимально разделил главную форму и поток.
Усомнился в этой строке
C++
1
while (FormGeneral->MemoList->Perform(EM_SCROLL,SB_PAGEDOWN,0)!=0);  // скролл вниз
Из потока пишет в мемо на главной форме и скроллит вниз. Прописал запись лога. Будем подождать )
Цитата Сообщение от Avazart Посмотреть сообщение
начать и нервно дергать окно программы в разные стороны по экрану?
Не знаю, не пробовал. У меня окно висит всегда в строго отведенном месте.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.10.2014, 13:49
Цитата Сообщение от +1 Посмотреть сообщение
Усомнился в этой строке
Цитата Сообщение от +1 Посмотреть сообщение
Из потока пишет в мемо на главной форме и скроллит вниз. Прописал запись лога. Будем подождать )
Ну вот тебе и код без синхронизации, который кстати соответсвует характеру ошибки.

C++
1
FormGeneral->MemoList
Кто тебе разрешал обращаться к форме из потока?
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
25.10.2014, 16:31  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Кто тебе разрешал обращаться к форме из потока?
Так у меня еще и GtringGrid есть )
Сделал отдельную тему.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.10.2014, 16:43
Ну-ну а потом как не в чем не виноваты удивляемся: "а чего оно падает?" ...
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
25.10.2014, 22:26  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
как не в чем не виноваты

Не по теме:

ни в чем

0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
25.10.2014, 22:34
Цитата Сообщение от +1 Посмотреть сообщение
то время как в программе не срабатывает ни один брейкпоинт,
проверь не утекают ли GDI ресурсы
проверить просто
Диспетчер задач, вкладка процессы, меню вид, выбрать столбцы, поставить галку на объекты GDI
и наблюдай за своим процессом
если объекты постоянно увеличиваются, ищи утечку
если много GDI то интерфейс виснет
а в 98 всю систему вешало
0
25.10.2014, 22:45

Не по теме:

ValeryS, Да уже выяснили, что он делает все без синхронизации как будто так и надо, вот и вещается интерфейс.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.10.2014, 22:45
Помогаю со студенческими работами здесь

Как отловить момент зависания скрипта и обойти его или найти причину?
Я пишу код который парсит rss ленты, использую для этого библиотеку feedparser. Скрипт работает, но стабильно после длительного промежутка...

Найти причину зависания установки windows
Доброго времени суток. Проблема такая, есть ноутбук Lenovo ideapad z585. Соседка говорит не запускается, старая система зависает при...

Найти причину периодического зависания Ubuntu
Привет всем. Установил Ubuntu. где-то недели 2 пользуюсь. всё это время читал в интернете руководство для начинающих и вникал потихоньку....

Найти причину вылета программы
Вообщем написал программу, вроде бы все правильно (так говорит компилятор), но программа вылетает с ошибкой "Отправить отчет/Не...

Найти причину вылета программы
пишу программу но в определённых местах она вылетает, помогите понять почему вылетает ? условия при которых она вылетает это когда s0 и в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru