Как выполнить GetLastError () при отладке в Visual Studio - PullRequest
45 голосов
/ 02 октября 2008

Вы перебираете код C / C ++ и только что вызвали Win32 API, который вышел из строя (обычно возвращая какой-то бесполезный общий код ошибки, например 0). Ваш код не выполняет последующий вызов GetLastError (), возвращаемое значение которого вы можете проверить для получения дополнительной информации об ошибке.

Как вы можете получить значение ошибки без перекомпиляции и воспроизведения ошибки? Ввод «GetLastError ()» в окне просмотра не работает («ошибка синтаксиса»).

Ответы [ 3 ]

59 голосов
/ 02 октября 2008

Как уже упоминалось пару раз, псевдорегистр @err покажет последнее значение ошибки, а @err,hr покажет ошибку в виде строки (если это возможно).

По словам Энди Пеннелла, члена команды Visual Studio, начиная с VS 7 (Visual Studio .NET 2002), использование символа '@' для обозначения псевдорегистратов не рекомендуется - они предпочитают использовать '$' ( как в $err,hr). И $, и @ пока поддерживаются.

Вы также можете использовать псевдорегистр $ err в условной точке останова; так что вы можете разбить строку кода, только если последняя ошибка не равна нулю. Это может быть очень удобный трюк.

Некоторые другие псевдорегистры, которые вам могут пригодиться (из выдающейся книги Джона Роббинса, «Отладка приложений для Microsoft .NET и Microsoft Windows» ):

  • $tib - показывает блок информации о потоке
  • $clk - показывает счетчик часов (полезен для функций синхронизации). Для более удобного использования поместите часы $clk, а затем дополнительные часы $clk=0. Вторые часы очистят псевдорегистр после отображения текущего значения, поэтому следующий шаг или шаг, который вы делаете, дает вам время только для этого действия. Обратите внимание, что это грубая синхронизация, которая включает в себя значительную часть накладных расходов отладчика, но она все еще может быть очень полезной.
6 голосов
/ 02 октября 2008

ERR,hr в окне часов обычно делает трюк

0 голосов
/ 02 октября 2008

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

В качестве бонуса вы можете оставить новый код там и на будущее.

Если вы не можете этого сделать, то QBziZ прав: «ERR, hr» делает это.

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