2014-10-30 73 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##指數或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##指數),我得到:

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的調試,使調試日誌視圖,並鍵入所產生的控制檯以下:

macro expand getMax(v, z) 

更多信息在GDB Manual

+0

感謝它的工作,但我有另一個問題,請參閱Edit1 – Irbis 2014-10-30 11:41:56

+0

沒有關於Edit1的想法;老實說,我從來沒有使用gdb的宏擴展。如果gdb不允許你進入宏,那麼看起來你運氣不好。在當前上下文中,錯誤「無符號」curr顯然是gdb的方式來說「我沒有在'WRAPABLE_HND_FUNCTN'上進入大括號」。 – 2014-10-30 15:49:26