关于C程序底层宏相关调试的问题

yfjok22 2017-03-17 09:18:32
各位大侠好

目前在读一个C语言写的比较大的科学计算库,在debug上碰到了一些问题

在该库文件底层,大量地使用了宏定义,类似于这种
#define MAX(a,b) a>b?a:b
而这种宏定义是在程序预处理阶段展开的,所以并没有源码文本与之对应,而这种情况下利用gdb等debug工具似乎是在这种地方断不下来
想来请教各位大侠,有木有什么办法能够在debug阶段真正step进入到宏定义里
亦或有什么其他办法来帮忙分析宏定义的展开过程机理并分析debug

谢谢
...全文
132 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-03-20
  • 打赏
  • 举报
回复
#define MAX(a,b)  ((a)>(b)?(a):(b))
自信男孩 2017-03-20
  • 打赏
  • 举报
回复
#define MAX(a,b)  (a>b?a:b)
宏定义就是等价替换,debug直接到(a >b ? a: b)不可以吗?
赵4老师 2017-03-20
  • 打赏
  • 举报
回复
VC编译选项加/EP /P(项目、属性、配置属性、C/C++、预处理器、预处理到文件:是,预处理取消显示行号:是),重新编译,查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898
自信男孩 2017-03-17
  • 打赏
  • 举报
回复
debug调试也是在程序生成可执行程序后的,而宏定义是在预编译阶段,预编译阶段就是还没有生命目标文件(.o文件);因为预编译阶段对于宏是等价替换,debug调试可以直接到替换后的代码。

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧