|
|
1
5
不幸的是,GNU工具并不是最好的,我的经验是,动态链接器极大地搅乱了局面。如果您能让Apache与您的模块静态链接,这将使gdb尤其能够更可靠地执行。我不知道这有多容易;很大程度上取决于Apache构建系统。 令人担忧但并不令人震惊的是,你不能轻易地用valgrind复制这个bug。
关于使用正确的标志进行编译,如果您使用
|
|
|
2
3
我敢肯定,调试技术在通用语言中是独立的,不存在“C调试”这样的想法。
在Dave澄清后编辑: 下一步应该是找到导致问题的代码的最小部分。如果你禁用了某个部分,模块就会被加载。只需将该部分尽可能小,移除/熏制该部分中的所有内容,直到找到理想的一条线,使模块无法加载。找到这条线之后。这将是一个准确的时间开始使用你的大脑:)只是别忘了100%验证 这是电话线 . |
|
|
3
2
非常笼统的建议:
对于dave的澄清: 初学者和专家之间可能是一个棘手的问题。 你是在用你在其他地方不使用的代码调用库吗?也许加载程序的路径就因为这个资源而混乱了。 除此之外,我几乎没有什么建议。很抱歉 注:我有机会读了大卫·J·阿甘的书 Debugging 去年。它不是特定于软件的,但它是一本很好的读物,而且很有帮助 即使 如果你已经是一个很好的调试器。 |
|
|
4
2
它在dlopen()调用中失败的事实对我来说似乎有点可疑。尝试打开共享对象时,可能会出现很多问题;但没有一个 应该 导致seg故障。 我能想到的一个例外是SO库初始化中的问题。在此基础上,我建议你做几件事来获取更多信息。
虽然我可能没有提供太多通用调试技巧,但我希望这里的内容可能会有所帮助。 |
|
|
5
1
我查看了valgrind文档,默认情况下它不会检查子进程。如果 Apache可以在子线程中运行您的模块 .请试试
|
|
|
6
1
我在Kernighan的编程课程“编程实践”中推荐我们的非计算机专业学生(即电气工程、数学、物理专业的学生)。它很好地提供了一些帮助开发的基本概念(比如测试和调试)。 如果你已经是有经验的程序员,这对你来说可能太基本了。然后我再给你们一句禅宗格言:“没有经验过滤的智慧是毫无价值的”。 我只能支持一个答案:再次查看堆栈跟踪,这是调试最相关的帮助(尤其是在边界处,执行跨越不同的模块(尤其是您的和lib/OS边界),并查看函数的参数,检查它们是否正常)。 |
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
Bobby · 复合字面值总是左值吗? 1 年前 |
|
9-Pin · C: 嵌套结构的堆栈内存分配 1 年前 |