想和各位讨论一下debug的技巧和方法。

dsao 2004-01-02 04:42:22
这几天调试一个linux下的driver虽然bug找到了,但是搞得我很头疼。
是这样的,我们的smart card reader driver for windows 可以通过HCT(hardware compatible test), 现在移植到了linux下面出了不少问题,主要是由于windows做了一些我不知道的工作,而在linux下就要自己在代码中实现这些功能,是一些传输协议解析。很不幸,我们的这部分自己写的模块有bug。我现在的做法是用softice调windows driver并保存打印信息,用prink打印linux下的信息。不得了,总共100多页的调试信息,再比较他们,猜出windows都偷摸做了些什么,八哥找到了,不过太伤神。所以有了些感想,想和大家讨论一下debug中遇到的一些情况,解决的方法。想学习学习。

最好每个人能一个就体实例说明一下。嘻嘻!
...全文
41 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
19830711 2004-01-02
  • 打赏
  • 举报
回复
关注中
analyser2003 2004-01-02
  • 打赏
  • 举报
回复
我得好好学习了呀!!!
ppgg1979 2004-01-02
  • 打赏
  • 举报
回复
晕,看到题目还以为是debug.exe的用法呢
victor_cui 2004-01-02
  • 打赏
  • 举报
回复
的确很难,如果是一些一定会出现的问题是用单步执行跟踪,如GDB是可以聚焦问题所在的,但是如果是偶然发生的错误,或者是因为线程同步造成的问题不管是跟踪还是输出信息都可能因为延时使问题被隐藏起来不能重现,这就需要仔细研究现象,分析代码来获取信息。在由就是获取第三方的工具,如C++Test可以对不同的单元进行黑盒测试和白盒测试,也会提供一些可以分析的数据
短歌如风 2004-01-02
  • 打赏
  • 举报
回复

如果不是针对具体情况,一般来说,在开发过程中首先要用好版本管理工具和单元测试,对每一次变更都要进行回归测试,如果发现了问题,找到问题出现的第一个版本,与前一版本比较,对变更的代码进行分析。

此外要对不正常的现象进行分析,很多错误有着很明显的独特表现比如边界错误、越界访问、错误的空循环体(在循环语句后多了一个分号)等,在有一定经验后会很容易判断。

有时可以用二分法,在代码中间设置断点,运行到这里后检查程序状态(每个全局变量、相关成员变量、函数中的局部变量等的取值),如果一切正常再到后面去设置断点,否则在前面设置断点。

总之,调试时不要依赖调试工具,它的作用只是让我们不再需要插入很多输出语句,最重要的还是对错误现象和代码的分析。而用好版本管理工具则可以非常有效地减少你的分析工作量。关于调试技巧,《程序设计实践》一书讲的很详细,虽然也经很常时间过去了,但这些技巧仍然是最有效的技巧。
dsao 2004-01-02
  • 打赏
  • 举报
回复
只要是有价值的答复,都有分,分不够,我可以再开几帖。
主要是想深入讨论一下。
dsao 2004-01-02
  • 打赏
  • 举报
回复
Pls say something about it.

3ks

69,371

社区成员

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

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