2009-04-12 2 views
0

Мы разрабатываем сетевую библиотеку, которая использует сокеты TCP и UDP. Эта DLL используется тестовым клиентом, который запускается несколько раз на том же ПК для теста нагрузки.Проблемы с запуском программы + DLL несколько раз в Windows XP?

В Windows Vista много проблем не запускать testclient. В Windows XP запуск его до 5 раз не представляет проблемы, но если мы начнем его 6 раз и более, а затем закрываем один клиент, ВСЕ их сбой с явно случайными трассировками стека.

Да, хотя мы не используем межпроцессный код (только сокеты между клиентами), прекращение одного из клиентов приводит к сбою всех из них.

Наша DLL скомпилирована с MSVC и использует Boost и Crypto ++ libs (статически связанные).

Любая идея, почему разные процессы могут влиять друг на друга?

+0

Вы пробовали отлаживать закрытие закрытия клиента? Если вы остановитесь на одном шаге, вы можете найти точный источник сбоя. Почему это приводит к сбою других, это следующий шаг. – eran

ответ

0

Идея: У вас есть ошибка.

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

Как и со многими проблемами, это один, вероятно, будет решена «Просто отладка»

+0

В частности, попробуйте запустить как минимум два клиента под отладчиком. Когда происходит «случайный» сбой, посмотрите на доступную память в то время всеми потоками и исполняемым кодом. Это связано с библиотекой? – Arkadiy

+0

Фактически, это было фактически ошибкой удаления объекта дважды, что странно происходило только с большим количеством клиентов. Спасибо. – Tarnschaf

1

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

  • Что делает сервер, когда шестой клиент закрыт. Отправляет ли он специальный пакет, который другие 5 клиентов просто не могут обработать?
  • Вы что-то читаете или пишете в файловой системе?
  • Вы используете общую память?

В целом, хотя, я обнаружил, что, имея, казалось бы, случайные трассировки стека в C++ обычно вызывается одним из следующих

  • данных коррупции
  • состояние гонки в логике распараллеливания.
0

Изменение DLL или блокировка DLL может привести к сбоям в работе программ, зависящих от него. Как правило, изменения в DLL будут заблокированы файловой системой, но возможно, что в вашем приложении вы делаете что-то необычное.

+0

спасибо за ответ, но DLL не изменяется во время выполнения программы – Tarnschaf

Смежные вопросы