Вопрос, наверное ламерский, но с наскока не удалось найти в нете ответа. В общем, останавливается драйвер, хочу посмотреть локальные переменные добавляю ее в окне Watch, после ентера или потери фокуса это переменная исчезает из окна Watch. Приходится в драйвере писать разные дурацкие конструкции, что бы узнать значения переменной.
Для этого есть окно Locals, вызывается по Alt+3. Возможно, потому что в текущем стековом кадре (stack frame) такой переменной нет. К тому же, контекст потока ещё нужно правильно установить, особенно если речь про режим ядра. Ну или проблема с символами ещё может быть. Или ты тупо что-то не так пишешь в поле имени переменной в окне Watch.
Как это не в контексте? Останавливается код в функции _asm int 3. У этой функции есть локальные переменные, вот они и не добавляются в окне Watch я никогда ничего не пишу, а копи-пастю, во избежании ошибок. Что касается символьного файла, то в окне WinDbg вижу, что он актуальный, бывают моменты, когда он устаревают, но я слежу за этим. Перед переменными не ставлю никаких знаков $! ?. А вот аргументы(!) этой функции, в которой я остановился на _asm int 3 нормально добавляются в Watch! Что за беда такая, глюк WinDbg?
neutronion Намёк что ли не очень прозрачный получился? Поставьте. Сразу перед именем переменной. Без пробелов.
Сейчас. Нет так не выходит. $!Open, $Open, !Open, !$Open - по этим вариантам добавленная переменная также сразу исчезает. Локальная переменная в функции такая: POPEN_INSTANCE Open; Может название функции впереди указать надо? Нет. Глобальная переменная только добавляется.
neutronion Первый вариант верный. Если продолжает исчезать, значит в текущем контексте, где Вы пытаетесь её установить, переменная отсутствует. Идентификатор локальности $! позволяет удерживать переменную в окне Watch, если в дальнейшем эта переменная будет отсутствовать (при трассировке кода из других контекстов), но не в момент её первого добавления в Watch.
У меня от таких вопросов кампег воспламенился: http://xmages.net/storage/10/1/0/0/1/upload/a714c34e.png Но всеже можно разглядеть, что глобалки показываются именно в Watch, а не гдето еще.
Watch Window The Watch window displays information about global variables, local variables, and registers. You can customize this window to show the items that you are tracking. Все что могу сказать.
neutronion Я говорил не контексте процесса. Переменная ведь не для процесса локальная? Я говорил о контексте блока кода. Блок кода выделяется фигурными скобками. Т.е. в момент добавления локальной переменной в окно Watch eip должен принадлежать тому же блоку кода, в котором объявлена переменная.