Поставщик учетных данных V2 Combobox неожиданное поведение - PullRequest
0 голосов
/ 09 декабря 2018

Я разрабатывал провайдер учетных данных нашей компании для Windows 10 уже почти год.

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

Краткое описание самой проблемы: поставщик учетных данных использует комбинированный список, который раньше работал без проблем.Теперь я переписал весь код для управления большим обновлением, но в систему попала странная ошибка.Ошибка возникает только в определенном сценарии.Я разрабатываю и тестирую код на своем персональном ноутбуке.

Сценарий:

1) Ноутбук подключен к моему монитору / источнику питания и т. Д.

2) Я заставляю его идти спать.

3) Я отключаю все кабели (включая питание).

4) Я просыпаюсь от сна.

Чем не работает выпадающий списокне показывает выбранный по умолчанию элемент, он пуст.Когда я его опускаю, он показывает все необходимые предметы.Чем кредитр проваливается и перезапускается, тогда все в порядке.

Я знаю, что в подобных «странных» сценариях в большинстве случаев утечка памяти или что-то связанное вызывает проблему.Когда я проверяю просмотрщик событий, он показывает мне c0000005, что является нарушением прав доступа.Я начал отлаживать, где нарушение.После этого я обнаружил, что программа ссылается на массив списка элементов списка (на самом деле вектор в моем случае) с очень и очень высоким показателем (причиной может быть нарушение диапазона).Фактический индекс, очевидно, хранится в переменной selectedComboItemIndex (DWORD).

Мне было любопытно, когда он изменился на это странное число, чем я обнаружил неожиданное поведение.Метод SetComboBoxSelectedValue случайным образом вызывается один раз (когда происходит ошибка) с невероятно высоким значением индекса.Я даже не вызываю этот метод в своем коде, поэтому понятия не имею, почему он вызывается.Вызов происходит, даже когда я не выпадаю из выпадающего списка.

Я даю ему шанс, что это может быть ошибкой в ​​самом кредпрове.Как вы думаете?Вы видели эту проблему раньше?

Заранее спасибо!

1 Ответ

0 голосов
/ 02 января 2019

Я решил проблему, прекратив использовать методы «SetSelected» и «SetDeselected».Кроме того, я отфильтровал входные параметры «SetComboBoxSelectedValue», чтобы принимать только допустимые числа.Когда параметр индекса недействителен, я вспоминаю тот же метод с параметром индекса, замененным на первый элемент (0).

...