Проблемы с запуском программы + DLL несколько раз в Windows XP? - PullRequest
0 голосов
/ 12 апреля 2009

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 12 апреля 2009

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

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

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

  • Повреждение данных
  • Состояние гонки в логике потоков.
0 голосов
/ 12 апреля 2009

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

0 голосов
/ 12 апреля 2009

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

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

Как и в случае со многими проблемами, эта проблема, вероятно, будет решена с помощью "Просто отладка"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...