2014-10-30 3 views
2

Я использую 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." 

ответ

4

Вам нужно будет скомпилировать программу с полным макро поддержкой:

g++ -ggdb3 

При отладке Qt Creator, включите вид Debugger журнала и введите следующую команду в получаемой консоли:

macro expand getMax(v, z) 

Дополнительной информации на GDB Manual.

+0

Спасибо, что это работает, но у меня есть еще одна проблема, см. Edit1 – Irbis

+0

Нет идеи о Edit1; Честно говоря, я никогда не использовал расширение макросов gdb. Если gdb не позволяет вам входить в макрос, кажется, вам не повезло. Ошибка «No symbol» curr «в текущем контексте», по-видимому, является способом gdb: «Я не вступаю в фигурные скобки в' WRAPABLE_HND_FUNCTN'. –

Смежные вопросы