natvisreload с использованием Visual Studio Professional 2017: синтаксическая ошибка
Я пытаюсь выполнить анализ дампа с помощью Visual Studio Professional 2017, но при вводе команды .natvisreload
в окне наблюдения я получаю syntax error
и нет ничего в output window
, (Кажется, это означает, что команда не понята)
Чтобы разобраться в реальной проблеме, я хотел бы знать пример другой команды, которую я могу запустить в Watch window
: кто-нибудь знает другую команду, начиная с точки, я могу запустить в Watch window
(чтобы определить, связана ли проблема с конкретной командой .natvisreload
или к генералу Watch window
)?
1 ответ
"natvis" - это аббревиатура от "нативного визуализатора". Используется неуправляемым механизмом отладки для предоставления настраиваемого представления собственного объекта. .natvisreload
Команда - это то, что может понять только неуправляемый механизм отладки. Из комментария несколько очевидно, как это пошло не так:
Пример слага, который вы видите, когда используете File > Open > File, чтобы открыть мини-дамп для процесса, который использует управляемый код. Обратите внимание на 3 варианта, которые есть в правом верхнем углу, чтобы начать отладку. "Managed Only" включает только управляемый механизм отладки, "Native Only" для неуправляемого механизма, "Mixed" включает оба.
Вы использовали "Смешанный". В то время как это включает оба двигателя, одновременно может быть только один активный. К сожалению, не всегда очевидно, какой именно из них находится под контролем. Кроме отладчика, способного отображать исходный код. И побочный эффект, как вы обнаружили здесь, команда ".natvisreload" идет "а?" поскольку это не команда, которую понимает обработчик управляемой отладки.
Таким образом, один из обходных путей заключается в использовании "Native Only".
Однако вы можете переключаться между двигателями на лету. Обычно это происходит автоматически, когда отладчик попадает на точку останова. Не вариант для отладки дампа. Другим неинтуитивным способом является использование окна отладчика Debug > Windows > Call Stack. При отладке в смешанном режиме вы видите в стеке как управляемые, так и неуправляемые кадры стека, начиная с RtlUserThreadStart внизу. Дважды щелкните один из этих фреймов, например нижний, и отладчик переключит механизмы. Обратите внимание, что вам не обязательно смотреть на что-то приличное, особенно если это управляемая программа, и вы просто получаете дамп машинного кода для нативного кода. Однако команда ".natvisreload" теперь будет работать так, как задумано.