Страниц: [1]
  Печать  
Автор Тема: Hard-coded breakpoint  (Прочитано 5654 раз)
Absolut
Full Member
***
Offline Offline

Сообщений: 179


Просмотр профиля
« : Мая 21, 2008, 02:11:44 pm »

Всем здравствуйте.

Столкнулся с непонятной ситуацией. Есть 4 одинаковых процесса, каждый из которых по сути HTTP-клиент. С некой периодичностью запрашивает определенный файл. Если их запустить и не залезать в отладчик - всё работает как надо. Но как только один из процессов подхватываю wd. Остальные отваливаются. Причем иногда по одному, иногда все сразу. Запустив сразу все 4 в отладчике, 3 из них вывалились с ошибкой "Hard-coded breakpoint instruction encountered". Хотелось бы понять, что это за зверь и с чем его едят. Гуглинг особо не помог
Записан
AG
QOR.Moderator
*****
Offline Offline

Сообщений: 872



Просмотр профиля WWW
« Ответ #1 : Мая 21, 2008, 03:28:00 pm »

Очень похоже на то, что все 4 процесса используют один физический сегмент код для исполнения. В таком случае, если установить брейкпоинт (int3) в одном процессе, то в остальных он тоже будет присутствовать. Т.к. остальные процессы находятся в отладке, то они, встретив брейкпоитн, офигевают от такого расклада и отваливаются...
Давно уже не работал в четверке, так что не могу сказать так ли это... но похоже именно на это.
Как вариант борьбы с таким произволом отладчика, попробуйте скопировать программу 4 раза и запустить все процессы из разных бинарников.
Записан

Absolut
Full Member
***
Offline Offline

Сообщений: 179


Просмотр профиля
« Ответ #2 : Мая 21, 2008, 04:10:00 pm »

Действительно, после запуска из разных бинарников подобная ситуация не возникает. Только вот как быть в случае если порождается дочерний процесс через fork/exec ?
Записан
AG
QOR.Moderator
*****
Offline Offline

Сообщений: 872



Просмотр профиля WWW
« Ответ #3 : Мая 21, 2008, 05:48:19 pm »

Absolut
Только вот как быть в случае если порождается дочерний процесс через fork/exec ?

Не вижу проблемы или не понял вопроса. Где сложность?
Записан

Absolut
Full Member
***
Offline Offline

Сообщений: 179


Просмотр профиля
« Ответ #4 : Мая 21, 2008, 06:43:50 pm »

AG
... все 4 процесса используют один физический сегмент код для исполнения...
Как вариант борьбы с таким произволом ... запустить все процессы из разных бинарников.


В первом случае я размножил бинарники под именами prog1, prog2 ... progN.

При fork/exec бинарник один и тот же.

Или может я уже чего-то не понимаю
Записан
AG
QOR.Moderator
*****
Offline Offline

Сообщений: 872



Просмотр профиля WWW
« Ответ #5 : Мая 21, 2008, 07:29:46 pm »

можно всегда сделать
system(cp my_bin /tmp/my_binX)
spawn(/tmp/my_binX)
а потом удалить...
но это не сильно хорошо.
С другой стороны, в рабочей системе далеко не всегда надо отлаживать процессы...
Записан

Страниц: [1]
  Печать  
 
Перейти в: