如何阅读c语言较大型工程的源码?

Emnkcn 2012-05-02 05:07:00
最近在读tcpdump的源码,学习其架构、业务逻辑,用的工具是source insight,在linux下wine的,功能上应该没问题。
我的方法是从main函数开始读,遇到函数、变量就去查相应的定义,基本是按照程序的执行顺序来读的。遇到以下几个问题,求助:
1.source insight查定义非常方便,但是查找某个变量的使用情况就不太好用了,毕竟如果一个变量用的比较频繁,想确定具体是在哪里改变的就不太容易,目前我是通过gdb跟踪来确定的,不过这样也挺麻烦,各位有没有什么比较方便的方法?举个例子,tcpdump可以接收挺多的参数,好多参数都有可能影响到callback这个变量,我想知道在某个语句里callback变量的值是在哪句赋的,有没有什么简便的方法来确定?
2.tcpdump里有很多#ifdef...#elif...#endif这种宏定义,有些平台的代码我不需要看(我只需要看linux下的,其它各种unix平台的都不需要看),这些代码都带着的话看起来不太方便,有的代码段太长了,翻起来麻烦,有没有什么简便的方法把这些代码段去除?
3.阅读c++代码时可以用uml记录,c的工程呢?难道要画流程图?不记录下的话很容易忘……
...全文
994 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuwons 2012-05-03
  • 打赏
  • 举报
回复
赵老师好
灼眼的超哥 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

引用 9 楼 的回复:

引用 7 楼 的回复:

引用 1 楼 的回复:

gdb的watch命令用过吗?
VS的数据访问断点用过吗?


如果在linux内核中,如何能够根据函数指针转换成调用函数的函数名呢?换句话说,我想知道我在调用谁,这个问题有什么好方法解决么?

试过gdb的back命令没有?在中断点使用这个命令,会得到在这之前调用的函数,如果你编译源码时……
[/Quote]
先在自己的电脑上测试,测试没问题后再交叉编译,或者,交叉编译个gdb,在开发板上用gdb。。。
yuhao113 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 7 楼 的回复:

引用 1 楼 的回复:

gdb的watch命令用过吗?
VS的数据访问断点用过吗?


如果在linux内核中,如何能够根据函数指针转换成调用函数的函数名呢?换句话说,我想知道我在调用谁,这个问题有什么好方法解决么?

试过gdb的back命令没有?在中断点使用这个命令,会得到在这之前调用的函数,如果你编译源码时,gcc编译器加了-g参数,这个……
[/Quote]

那如果是交叉编译呢?gdb无法使用。
我的意思是能不能在代码中加入什么库,或者什么代码可以将函数指针转化为对应的函数名
灼眼的超哥 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 1 楼 的回复:

gdb的watch命令用过吗?
VS的数据访问断点用过吗?


如果在linux内核中,如何能够根据函数指针转换成调用函数的函数名呢?换句话说,我想知道我在调用谁,这个问题有什么好方法解决么?
[/Quote]
试过gdb的back命令没有?在中断点使用这个命令,会得到在这之前调用的函数,如果你编译源码时,gcc编译器加了-g参数,这个命令的结果就会显示该函数具体在哪个源码文件,哪个函数,那一行。
灼眼的超哥 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

大型工程的main函数,通常都是小测试程序里的。

我认为应该先看文档。
[/Quote]
对,这些main函数都是用于测试整个工程的性能的。
yuhao113 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

gdb的watch命令用过吗?
VS的数据访问断点用过吗?
[/Quote]

如果在linux内核中,如何能够根据函数指针转换成调用函数的函数名呢?换句话说,我想知道我在调用谁,这个问题有什么好方法解决么?
AnYidan 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

赵老师好
[/Quote]

++
yuhao113 2012-05-03
  • 打赏
  • 举报
回复
我觉得lz的第一个问题比较有价值,关注一下,看有人能帮忙不
Emnkcn 2012-05-03
  • 打赏
  • 举报
回复
大家都理解错我的意思了吧……我想问的是,能不能不用gdb而直接读源码
「已注销」 2012-05-03
  • 打赏
  • 举报
回复
大型工程的main函数,通常都是小测试程序里的。

我认为应该先看文档。
赵4老师 2012-05-02
  • 打赏
  • 举报
回复
比尔·盖茨:“不要向复杂低头。”
赵4老师 2012-05-02
  • 打赏
  • 举报
回复
gdb的watch命令用过吗?
VS的数据访问断点用过吗?

70,023

社区成员

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

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