我正在尝试测试我编写的调度程序。我安排了两个进程 - 两个进程都是无限循环(while(1)语句)。当我运行该程序时,有时会在十秒后(有时5秒,有时15秒或更多)发生段错误。有时它根本不会出现段错误并按预期运行。我有一个日志文件,告诉我这两个进程按照预期在发生段错误之前被调度。我试图使用gdb调试错误,但它不是非常有用。这里是我用backtrace得到的:使用gdb调试C程序
#0 0x00007ffff7ff1000 in ??()
#1 0x000000000000002b in ??()
#2 0x00007ffff78b984a in new_do_write() from /lib64/libc.so.6
#3 0x000000000061e3d0 in ??()
#4 0x0000000000000000 in ??()
我真的不明白#2。
我认为这可能是一个堆栈溢出相关的错误。然而,我只在整个过程中使用了两次malloc - 两次我建立两个进程时,我在我写的pcb表中分配了一个pcb块。有没有人遇到过类似的问题?这可能与我如何设置/交换调度程序中的上下文有关吗?为什么有时会出现段错误,有时不会呢?
你应该使用调试信息编译你的代码(在gcc中使用-g),那么你的堆栈跟踪会更有意义 – onon15
看到这个明显被捣毁的堆栈,我怀疑'-Wall'也会有帮助。 – alk
而不是描述你的代码,你应该在这里发布它。评论具体代码比散文更容易。 –