2014-10-30 77 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