qtcreator + gdb,扩展宏定义

时间:2014-10-30 10:29:44

标签: c++ gcc gdb qt-creator

我使用QtCreator和gdb 7.7。我有一个示例宏:

#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."

1 个答案:

答案 0 :(得分:4)

您需要使用完整的宏支持编译您的程序:

g++ -ggdb3

在Qt Creator上调试时,启用Debugger Log视图并在生成的控制台中键入以下内容:

macro expand getMax(v, z)

有关GDB Manual的更多信息。