我使用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."
答案 0 :(得分:4)
您需要使用完整的宏支持编译您的程序:
g++ -ggdb3
在Qt Creator上调试时,启用Debugger Log视图并在生成的控制台中键入以下内容:
macro expand getMax(v, z)
有关GDB Manual的更多信息。