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."
感谢它的工作,但我有另一个问题,请参阅Edit1 – Irbis 2014-10-30 11:41:56
没有关于Edit1的想法;老实说,我从来没有使用gdb的宏扩展。如果gdb不允许你进入宏,那么看起来你运气不好。在当前上下文中,错误“无符号”curr显然是gdb的方式来说“我没有在'WRAPABLE_HND_FUNCTN'上进入大括号”。 – 2014-10-30 15:49:26