Официальный форум СВД Встраиваемые Системы
29 Март, 2024, 18:11:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Какй сигнал получает удалённый отладчик l  (Прочитано 1101 раз)
KA3AKOB
Пользователь

Сообщений: 54


« : 07 Декабрь, 2017, 11:10:00 »

Отлаживаю драйвер из среды Momentics 4.7 на удалённом процессоре Fastwel CPC304. После нажатия кнопки Terminate в окне Debug продолжают оставаться зелёными потоки отладчика и собственно драйвера. В драйвере используется вызов InterruptAttachEvent, то есть вся реальная работа происходит в безопасном потоке, моём потоке. Тем не менее, система удалённого процессора подвисает и единственный способ возобновить работу - это нажать кнопку Reset на процессоре. Какой сигнал получает приложение (драйвер)от среды Momemntics через qconn, чтобы я мог его перехватить, нормально завершить все потоки и не подвешивать систему? Предполагаю, что драйвер с потоками (pthread_create(...)) получает особые привилегии через ThreadCtl(_NTO_TCTL_IO,0) и поэтому не может быть остановлен как обычное приложение.
« Последнее редактирование: 07 Декабрь, 2017, 14:30:28 от KA3AKOB » Записан
Игорь Рондарев
Модератор
Опытный пользователь

Сообщений: 281

Сотрудник СВД ВС


WWW
« Ответ #1 : 11 Декабрь, 2017, 15:33:10 »

Среда разработки использует сигнал 9 (SIGKILL) для завершения работы приложений, запущенных на целевой системе. Воспроизводится ли данная ситуация (с "зависанием") при завершении работы драйвера в процессе работы отладочной сессии с помощью внешних утилит kill или slay (например, slay -sKILL <pid_драйвера>, slay -sTERM <pid_драйвера>)?
Записан

KA3AKOB
Пользователь

Сообщений: 54


« Ответ #2 : 12 Декабрь, 2017, 17:02:56 »

Нет, не воспроизводится. Если переношу файл с двоичным кодом драйвера на целевой процессор и через telnet его запускаю, то kill -9 не валит систему. Но тогда отладка никакая. А мне надо бы, при получении некоего сигнала, понятно, что не SIGKILL, аккуратно закрыть порты на внешнем устройстве,  отключить прерывания, завершить все потоки и главный поток драйвера.
Записан
Игорь Рондарев
Модератор
Опытный пользователь

Сообщений: 281

Сотрудник СВД ВС


WWW
« Ответ #3 : 13 Декабрь, 2017, 13:21:59 »

А если  команду kill -9 на целевой машине выполнить непосредственно в процессе работы отладочной сессии (т.е. при работающем GDB)?
Также попробуйте предварительно отключаться (кнопка Detach) перед остановкой приложения. Как поведёт себя система в данном случае?
« Последнее редактирование: 13 Декабрь, 2017, 13:48:57 от Игорь Рондарев » Записан

KA3AKOB
Пользователь

Сообщений: 54


« Ответ #4 : 15 Декабрь, 2017, 16:23:03 »

Кнопка Detach в моём варианте настроек среды (QNX® Momentics® Integrated Development Environment Version: 4.7.0
Build id: 201006232051) отсутствует. Наличествует кнопка Disconnect.
Однако, в настоящий момент эффект зависания системы отсутствует. Воспроизвести его по неизвестной мне причине не удаётся пока. Тем не менее, вопрос, как аккуратно завершить все потоки драйвера, если перехватить сигнал kill -9 в самой программе не удастся, остаётся.
« Последнее редактирование: 15 Декабрь, 2017, 18:48:18 от KA3AKOB » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2020 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 08 Февраль, 2021, 22:30:00