我用 C 编写了一个 Apache 模块。在某些条件下,我可以让它出现段错误,但我不知道为什么。此时,可能是我的代码,可能是我编译程序的方式,也可能是操作系统库中的错误(段错误发生在调用 dlopen() 期间)。
我尝试过运行 GDB 和 Valgrind,但没有成功。GDB 让我回溯到看起来毫无意义的 dlopen() 系统调用。在 Valgrind 中,该错误实际上似乎消失了,或者至少变得不可重现。另一方面,当谈到这些工具时,我完全是个新手。
我对生产质量的 C 编程有点陌生(我多年前开始使用 C,但从未专业地使用它。)对我来说学习调试程序的最佳方法是什么?我还应该研究哪些其他工具?总之,您如何弄清楚如何应对新的错误挑战?
编辑:澄清一下,我要感谢 Sydius 和 dmckee 的意见。我看过 Apache 的指南,并且对 dlopen(以及 dlsym 和 dlclose)相当熟悉。我的模块大部分都可以工作(它大约有 3k 行代码,只要我不激活这一部分,一切似乎就可以正常工作。)
我想这就是我最初的问题的来源——我不知道下一步该做什么。我知道我没有充分利用 GDB 和 Valgrind。我知道我可能没有使用完全正确的标志进行编译。但我很难弄清楚更多。我可以找到告诉我已经知道的内容的初学者指南,以及告诉我比我需要知道的更多但没有指导的手册页。