Eclipse GDB:如何单步进入多行代码实现的宏(Kinetis Design Studio 3.2.0)
解决Kinetis Design Studio 3.2.0中单步进入多行宏的问题
刚好我之前在KDS里调试多行宏的时候也碰到过一模一样的情况,给你几个亲测可行的办法:
1. 调整编译选项,保留宏调试信息
默认情况下编译器会直接展开宏,调试器根本看不到宏内部的代码结构,单步自然会直接跳过。你可以这么改:
- 右键你的项目 → Properties → 找到 C/C++ Build → Settings
- 切换到 Tool Settings 标签,选择 ARM Compiler → Preprocessor
- 勾选 "Enable generation of debug information for preprocessor macros"(KDS3.2用的GCC 4.9.2版本完全支持这个选项)
- 同时别忘了去 Optimization 选项里把优化级别改成 None (-O0),优化会把宏代码合并压缩,调试器根本抓不到单步断点
2. 调试器开启宏展开支持
光改编译选项还不够,调试器这边也要同步设置:
- 先进入调试模式,然后点击Debug视图右上角的下拉菜单(或者去 Window → Preferences → Run/Debug → Debugger)
- 找到 "Enable macro expansion in debugging" 选项并勾选
- 如果找不到这个选项,你可以打开Debug Configuration,切换到 Debugger 标签页,在GDB的附加参数里加上
-g3,这个参数会让GDB加载更详细的宏调试信息
3. 临时替换宏为函数(极端情况)
如果上面的方法都不生效,你可以临时把DECODE_QSTR这个宏改成静态函数,调试完成后再改回宏。或者用编译器的-E选项预编译你的代码,看宏展开后的具体代码,直接在展开后的do-while循环行上设置断点,这样调试器就能精准停在里面了。
对了,还要确认你的宏是不是用do { ... } while(0)这种标准多行宏写法,这种写法调试器支持度最好,要是用其他写法可能会有额外的识别问题。
内容的提问来源于stack exchange,提问作者Bob




