|
Дата: 21 Май, 11:11
Всем здравствуйте.
Столкнулся с непонятной ситуацией. Есть 4 одинаковых процесса, каждый из которых по сути HTTP-клиент. С некой периодичностью запрашивает определенный файл. Если их запустить и не залезать в отладчик - всё работает как надо. Но как только один из процессов подхватываю wd. Остальные отваливаются. Причем иногда по одному, иногда все сразу. Запустив сразу все 4 в отладчике, 3 из них вывалились с ошибкой "Hard-coded breakpoint instruction encountered". Хотелось бы понять, что это за зверь и с чем его едят. Гуглинг особо не помог  |
|
Дата: 21 Май, 12:28
Очень похоже на то, что все 4 процесса используют один физический сегмент код для исполнения. В таком случае, если установить брейкпоинт (int3) в одном процессе, то в остальных он тоже будет присутствовать. Т.к. остальные процессы находятся в отладке, то они, встретив брейкпоитн, офигевают от такого расклада и отваливаются...
Давно уже не работал в четверке, так что не могу сказать так ли это... но похоже именно на это.
Как вариант борьбы с таким произволом отладчика, попробуйте скопировать программу 4 раза и запустить все процессы из разных бинарников.
|
|
Дата: 21 Май, 13:10
Действительно, после запуска из разных бинарников подобная ситуация не возникает. Только вот как быть в случае если порождается дочерний процесс через fork/exec ?
|
|
Дата: 21 Май, 14:48
Absolut Только вот как быть в случае если порождается дочерний процесс через fork/exec ?
Не вижу проблемы или не понял вопроса. Где сложность? |
|
Дата: 21 Май, 15:43
AG ... все 4 процесса используют один физический сегмент код для исполнения...
Как вариант борьбы с таким произволом ... запустить все процессы из разных бинарников.
В первом случае я размножил бинарники под именами prog1, prog2 ... progN.
При fork/exec бинарник один и тот же.
Или может я уже чего-то не понимаю  |
|
Дата: 21 Май, 16:29
можно всегда сделать
system(cp my_bin /tmp/my_binX)
spawn(/tmp/my_binX)
а потом удалить...
но это не сильно хорошо.
С другой стороны, в рабочей системе далеко не всегда надо отлаживать процессы...
|