问一个阅读和理解C++代码的问题

[复制链接]
查看11 | 回复4 | 2021-1-29 05:13:14 | 显示全部楼层 |阅读模式
有一个开源软件,用C++写的,其中使用了大量的设计模式,很多功能封装在动态链接库中,运行时动态加载这使得跟踪和调试变得有些困难,比如说有时候难以搞清楚这个函数到底是父类的还是子类的因此,我能想到的一个办法是利用__FILE__,__LINE__和__FUNCTION__这三个宏插入一个打印宏语句到每个函数的开始.这样,运行的时候就能搞清楚其执行的详细过程
但问题是,手动添加工作量太大,有没有办法自动处理?我能想到的三个思路:1.编译时处理也就是说是否存在某个工具具备这个功能,在编译时加入一些指令.类似于gprof一样2.文本处理,用文本处理工具识别函数体,然后修改源码3.手动添加,只能用于较为关心的类.
第一种办法最优,第三种最次.谁有前两种思路的解决方案?或是其它更好的方案?谢谢

回复

使用道具 举报

千问 | 2021-1-29 05:13:14 | 显示全部楼层
你指的是gcc的-finstrument-functions这个参数提供的功能?
eqw (再见) 在 ta 的帖子中提到:有一个开源软件,用C++写的,其中使用了大量的设计模式,很多功能封装在动态链接库中,运行时动态加载这使得跟踪和调试变得有些困难,比如说有时候难以搞清楚这个函数到底是父类的还是子类的因此,我能想到的一个办法是利用__FILE__,__LINE__和__FUNCTION__这三个宏插入一个打印宏语句到每个函数的开始.这样,运行的时候就能搞清楚其执行的详细过程但问题是,手动添加工作量太大,有没有办法自动处理?我能想到的三个思路:1.编译时处理...........................

回复

使用道具 举报

千问 | 2021-1-29 05:13:14 | 显示全部楼层
我看到网上的一个示例好像只能以函数的方式插入打印出来的只是调用和被调用函数的地址blog.csdn.net/aobai219/rss/list
onelittlefox (更高效的C++,更多时间留给爱) 在 ta 的帖子中提到:你指的是gcc的-finstrument-functions这个参数提供的功能?

回复

使用道具 举报

千问 | 2021-1-29 05:13:14 | 显示全部楼层
还有一种思路4.AspectC++先获取已知的函数和对象列表,然后将这些信息显式打印出来
eqw (再见) 在 ta 的帖子中提到:有一个开源软件,用C++写的,其中使用了大量的设计模式,很多功能封装在动态链接库中,运行时动态加载这使得跟踪和调试变得有些困难,比如说有时候难以搞清楚这个函数到底是父类的还是子类的因此,我能想到的一个办法是利用__FILE__,__LINE__和__FUNCTION__这三个宏插入一个打印宏语句到每个函数的开始.这样,运行的时候就能搞清楚其执行的详细过程但问题是,手动添加工作量太大,有没有办法自动处理?我能想到的三个思路:1.编译时处理...........................

回复

使用道具 举报

千问 | 2021-1-29 05:13:14 | 显示全部楼层
addr2line
eqw (再见) 在 ta 的帖子中提到:我看到网上的一个示例好像只能以函数的方式插入打印出来的只是调用和被调用函数的地址blog.csdn.net/aobai219/rss/list
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行