Можете ли вы использовать отладчик MSVC 6.0 для «перехода в макрос»? - PullRequest
0 голосов
/ 13 ноября 2009

Я использую MSVC 6.0 для вызова макроса в Win32API и получаю нарушение прав доступа. Я знаю, что указатели, которые я передаю макросу, содержат действительные адреса, хотя они явно не указывают на правильные данные.

Макрос принимает несколько указателей, и я не уверен, какой указатель является ошибочным, поэтому я хотел бы использовать отладчик MSVC, чтобы «войти в» макрос, чтобы точно определить, в чем проблема. Когда я попробовал, отладчик просто выдает ошибку нарушения доступа.

Можно ли «войти» в макрос с помощью отладчика MSVC 6.0? Если нет, могу ли я в любом случае проверить, к чему расширяется макрос, чтобы я мог лучше понять, что я делаю неправильно?

Ответы [ 4 ]

2 голосов
/ 13 ноября 2009

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

Альтернативным вариантом будет пошаговое выполнение разборки, если ваш уровень навыка достаточен для обратной связи дизассемблированного кода с исходным макросом.

1 голос
/ 13 ноября 2009

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

0 голосов
/ 13 ноября 2009

Я бы просто шагнул в разборку - обычно, даже если вы не являетесь экспертом по сборке, короткие прогоны кода (несколько строк) довольно быстро преобразуются в код сборки на C / C ++ (особенно в Выпуск сборок). Надеюсь, что макрос не такой волосатый, что это не так.

Помните, что много отладки происходит даже без исходного кода, поэтому совместное использование исходного кода и разборки обычно не так уж плохо. И если это то, с чем у вас нет особого опыта, это отличный опыт, чтобы получить.

0 голосов
/ 13 ноября 2009

Вы можете входить в функции, которые вызываются из макроса, но, насколько я знаю, не могут реально перебирать сами строки макроса. И да, если вы кодируете компиляцию - вы можете найти определение макроса (используйте браузер функций / классов MSVC, чтобы найти его определение, возможно, какой-то заголовочный файл)

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