相关疑难解决方法(0)

如何学习C调试和最佳实践

我在C中编写了一个Apache模块.在某些情况下,我可以将它转换为段错误,但我不知道为什么.此时,它可能是我的代码,它可能是我编译程序的方式,或者它可能是OS库中的错误(在调用dlopen()期间发生了段错误).

我尝试过运行GDB和Valgrind但没有成功.GDB让我对dlopen()系统调用进行了回溯,看起来毫无意义.在Valgrind中,这个bug实际上似乎消失了,或者至少变得不可重复.另一方面,对于这些工具,我完全是新手.

我对生产质量的C编程有点新兴(我多年前从C开始,但从未专业地使用它.)对于我学习调试程序的最佳方法是什么?我应该调查哪些其他工具?总之,您如何弄清楚如何应对新的bug挑战?

编辑:只是为了澄清,我想感谢Sydius和dmckee的输入.我看了一下Apache的指南,并且对dlopen(以及dlsym和dlclose)非常熟悉.我的模块大部分都工作(大约有3k行代码,只要我没有激活这一段,事情就好了.)

我想这是我原来的问题所在 - 我不知道接下来该做什么.我知道我没有充分发挥GDB和Valgrind的潜力.我知道我可能没有用正确的标志进行编译.但是我很难搞清楚.我可以找到初学者的指南,告诉我我已经知道的东西,以及告诉我超过我需要了解但没有指导的人工页面.

c apache debugging gdb valgrind

7
推荐指数
2
解决办法
1944
查看次数

对于难以解决的错误,您的最佳做法是什么?

我有时会发现自己试图修复一个顽固的虫子,只是在一段时间后才发现一些非常明显的错误.

当我认为这个问题与某些事情有关时,我会发生这种情况,并且我会对其他可能出错的事情"盲目".

大部分时间都有助于睡眠,第二天早上我立即看到了问题.

过去发生在我身上的事情:

  1. 编辑没有任何效果的真实源文件的副本.
  2. 没有关注真正的问题,而是在真正的问题已经解决的同时试图解决问题.
  3. 没有进行编译/构建,因为我之前使用的是解释语言.

在调试过程中你有什么'盲目'的体验?

language-agnostic debugging

2
推荐指数
1
解决办法
558
查看次数

标签 统计

debugging ×2

apache ×1

c ×1

gdb ×1

language-agnostic ×1

valgrind ×1