Я использую QtCreator и gdb 7.7. У меня есть пример макроса:qtcreator + gdb, определение макросов
#define getMax(a,b) ((a) > (b) ? (a) : (b))
Тогда где-то в коде точки останова устанавливается, когда этот макрос используется:
break at line: x = getMax(v, z);
Можно ли увидеть расширенный макрос во время отладки?
Edit1 Как проверить значение переменной, например FUNC## Index или Curr после расширен следующий макрос:
#define WRAPABLE_HND_FUNCTN(func, ...) \
{ \
enum { num = funC## Index }; \
unsigned int curr = mCurrFunction[num]; \
while (mCurrFunction[num] < mInterface.size() && \
!mInterface[mCurrFunction[num]].enabled[num]) \
++mCurrFunction[num]; \
if (mCurrFunction[num] < mInterface.size()) \
{ \
mInterface[mCurrFunction[num]++].obj-> func (__VA_ARGS__); \
mCurrFunction[num] = curr; \
return; \
} \
mCurrFunction[num] = curr; \
}
Когда я исполняю print handleEventIndex
(который был FUNC## Index) я получаю:
554print handleEventIndex
&"print handleEventIndex\n"
~"$2 = CompScreen::handleEventIndex"
~"\n"
554^done
Для print curr
я получаю:
555print curr
&"print curr\n"
&"No symbol \"curr\" in current context.\n"
555^error,msg="No symbol \"curr\" in current context."
Спасибо, что это работает, но у меня есть еще одна проблема, см. Edit1 – Irbis
Нет идеи о Edit1; Честно говоря, я никогда не использовал расширение макросов gdb. Если gdb не позволяет вам входить в макрос, кажется, вам не повезло. Ошибка «No symbol» curr «в текущем контексте», по-видимому, является способом gdb: «Я не вступаю в фигурные скобки в' WRAPABLE_HND_FUNCTN'. –