Когда наши разработчики пытаются отладить RPC-сервер C ++ / Winrt ncalrpc после присоединения вновь построенного и запущенного серверного процесса к отладчику VS2017, они не могут установить точки останова для новых или измененных строк кода, даже если разрешить точку останова для кода, которыйне совсем то же самое;в IDE появляется непредвиденное сообщение об ошибке символа.
Один из членов команды сообщил мне, что это происходит из-за длительных подключений RPC к конечным точкам RPC из других приложений и служб, которые используют основную службу.Я не знаю много о RPC, но читал.Проверка источника основной службы, кажется, указывает на то, что они все делают правильно для остановки сервера ,
RPC_STATUS rs = 0;
rs = RpcMgmtStopServerListening(NULL);
//...
rs = RpcServerUnregisterIf(RPC_IF_SPEC, nullptr, 0);
//...
rs = RpcEpUnregister(RPC_IF_SPEC, BindingVector, nullptr);
Но, если честно, это также может быть то, что они должны использовать rs = RpcServerUnregisterIf(NULL, NULL, 0);
вместо этого я действительно не могу сказать.
Сейчас нам нужно либо вручную отследить все процессы, которые подключаются к этому сервису, и убить / остановить их, либо выбрать «легкий» выход и выполнить перезагрузку.после установки нового сервиса, позволяющего нам отлаживать в правильных местах файлов при подключении процесса к VS2017.
Моя полезная идея, чтобы обойти это, состояла в том, чтобы посмотреть, смогу ли я сгенерировать список процессов, подключающихся к RPCКонечная точка, сбросьте их с нуля, установите новую службу и перезапустите их.
В качестве альтернативы эта статья , кажется, указывает на то, что избежать этой проблемы, во-первых, можно с помощью чего-то, называемого Ассоциациями, но этонесколько расплывчато, как это сделать.
Сама ассоциация подсчитывается по ссылкам, и когда все ссылки ушли, он останавливает и закрывает все соединения.Каждый дескриптор привязки и каждый дескриптор контекста содержат ссылку на ассоциацию.Когда все закрыты, связь исчезает.
Обновление:
Принятый ответ указывает, что это невозможно с внешним процессом;это не способ достичь этой цели с помощью внешнего процесса.