You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Eclipse GDB:如何单步进入多行代码实现的宏(Kinetis Design Studio 3.2.0)

解决Kinetis Design Studio 3.2.0中单步进入多行宏的问题

刚好我之前在KDS里调试多行宏的时候也碰到过一模一样的情况,给你几个亲测可行的办法:

1. 调整编译选项,保留宏调试信息

默认情况下编译器会直接展开宏,调试器根本看不到宏内部的代码结构,单步自然会直接跳过。你可以这么改:

  • 右键你的项目 → Properties → 找到 C/C++ BuildSettings
  • 切换到 Tool Settings 标签,选择 ARM CompilerPreprocessor
  • 勾选 "Enable generation of debug information for preprocessor macros"(KDS3.2用的GCC 4.9.2版本完全支持这个选项)
  • 同时别忘了去 Optimization 选项里把优化级别改成 None (-O0),优化会把宏代码合并压缩,调试器根本抓不到单步断点

2. 调试器开启宏展开支持

光改编译选项还不够,调试器这边也要同步设置:

  • 先进入调试模式,然后点击Debug视图右上角的下拉菜单(或者去 WindowPreferencesRun/DebugDebugger
  • 找到 "Enable macro expansion in debugging" 选项并勾选
  • 如果找不到这个选项,你可以打开Debug Configuration,切换到 Debugger 标签页,在GDB的附加参数里加上 -g3,这个参数会让GDB加载更详细的宏调试信息

3. 临时替换宏为函数(极端情况)

如果上面的方法都不生效,你可以临时把DECODE_QSTR这个宏改成静态函数,调试完成后再改回宏。或者用编译器的-E选项预编译你的代码,看宏展开后的具体代码,直接在展开后的do-while循环行上设置断点,这样调试器就能精准停在里面了。

对了,还要确认你的宏是不是用do { ... } while(0)这种标准多行宏写法,这种写法调试器支持度最好,要是用其他写法可能会有额外的识别问题。

内容的提问来源于stack exchange,提问作者Bob

火山引擎 最新活动