chinesefys 发表于 2012-09-19 15:43

大家是怎么调试源码的,别人的应用程序源码,不是内核源码

大家是怎么调试源码的,别人的应用程序源码,不是内核源码。


我知道先make之后用gdb调试,但用gdb命令行调试用不惯啊,

想导入到eclipse中调试,不会啊!我在另一个帖子问的问题,也没人回答,上一个帖子http://bbs.chinaunix.net/thread-3771714-1-1.html

既然eclipse调试没人回答,那干脆问问大家是怎么调试别人的应用程序源码的?有什么好方法没,不要吝啬告诉俺啊!

linux_c_py_php 发表于 2012-09-19 15:43

本人读了很多C开源服务端代码, 有自己的一些感受:

1, 代码依据的算法与原理需要先搞懂, 比如你看lighttpd/nginx/apache, 你都不知道http协议就很难看下去, 这就要求你起码做过lamp的开发, 对http/cgi/fcgi有一个应用级别的认识, 之后才能具体到代码里去探究实现.

2, 先把程序用熟练, 各种命令行参数都用一用, 程序的配置文件大致知道是什么格式, 都能配置些什么参数.

3, 开始看外围代码, 比如: 网络I/O Event框架, chunk Buffer, 内存池, 数据结构(nginx rbtree), 这样一方面为将来看核心主干代码打好基础, 免得不断的回头翻, 一方面也是熟悉作者的行文风格, 而且也可以学习一下人家的代码设计风格, 主要还是因为外围代码难度小, 独立性高, 足够模块化.

4, 核心代码从main走起, 这个过程很痛苦, 因为最难的就是把整个程序逻辑串起来, 最终达成系统化的认识, 抓住框架, 忽略细节, 这是需要一点功力的. 建议放平心态, 一步一步钻, 看这部分是一定很痛苦的, 但也一定是痛苦并享受的, 每次突破一点就会很兴奋. 但开源代码一定要习惯这样一个心态, 即你不可能看到哪就看懂, 一定是拖着现在看不懂的, 往后面看新的, 一直到前后可以串联起来.


如果是身边同事的代码, 一样的道理, 先学会用程序, 搞清楚程序用了什么原理, 干了什么事, 然后再根据现象看本质(代码)就会简单很多.同事的代码和开源代码比其实简单多了, 一方面代码量小, 一方面都是凡人, 读代码的同时会深刻的感觉到作者每一步是想干什么, 但开源代码一般比较大, 而且非常精致, 就需要费很多劲去体会作者的意图.

MMMIX 发表于 2012-09-19 15:57

回复 1# chinesefys


    用 GDB 调试。

chinesefys 发表于 2012-09-19 17:02

回复 3# linux_c_py_php

非常感谢,尤其是看不注释的代码,更痛苦!
还想请教 linux_c_py_php ,您是用什么工具阅读代码的?
   

chinesefys 发表于 2012-09-19 17:03

回复 2# MMMIX


   gdb很强大,看样子我还是得用gdb

linux_c_py_php 发表于 2012-09-19 17:10

source insight, 看熟了就丢到Linux里改代码打印点东西玩玩了.


chinesefys 发表于 2012-09-19 17:02 static/image/common/back.gif
回复 3# linux_c_py_php

非常感谢,尤其是看不注释的代码,更痛苦!

linux_c_py_php 发表于 2012-09-19 17:12

还有, 你还是看少了, 开源代码哪有注释哪有文档? 就是锻炼你的读代码能力, 读多了自己掌握了设计能力, 看代码就不再是一件痛苦的事了, 但也不意味着没有挑战.

linux_c_py_php 发表于 2012-09-19 17:10 static/image/common/back.gif
source insight, 看熟了就丢到Linux里改代码打印点东西玩玩了.

chinesefys 发表于 2012-09-19 17:23

回复 7# linux_c_py_php

嗯,谢啦,沉下心来看代码,吼吼!

   

device_memory 发表于 2012-09-20 14:42

gdb调试         

device_memory 发表于 2012-09-20 14:43

或者到处加printf      
页: [1] 2
查看完整版本: 大家是怎么调试源码的,别人的应用程序源码,不是内核源码