gpt4 book ai didi

c - 使用 gdb 调试 C 程序

转载 作者:行者123 更新时间:2023-11-30 15:53:46 27 4
gpt4 key购买 nike

我正在尝试测试我编写的调度程序。我安排了两个进程 - 都是无限 while 循环(只是 while(1) 语句)。当我运行该程序时,有时它会在 10 秒(有时 5 秒,有时 15 秒或更长)后出现段错误。有时它根本不会出现段错误并按预期运行。我有一个日志文件,它显示两个进程在段错误发生之前都按预期安排。我正在尝试使用 gdb 调试错误,但它不是很有帮助。这是我通过回溯得到的结果:

#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 表中 malloc 一个 pcb block 。以前有人遇到过类似的问题吗?这可能与我在调度程序中设置/交换上下文的方式有关吗?为什么有时会出现段错误,有时不会?

最佳答案

您没有告诉如何获得问题中显示的堆栈跟踪。

堆栈跟踪很可能是伪造的,不是因为堆栈已损坏,而是因为您错误地调用了 GDB,例如在附加进程或检查核心转储时指定了错误的可执行文件。

一个常见的错误是使用 -O2 构建可执行文件(我们将此可执行文件称为 E1),然后使用 -g 重建它(让我们称之为E2)并尝试分析正在运行E1的实时进程的core,将GDB E2作为符号文件。

不要这样做,它不起作用,也不会起作用。

关于c - 使用 gdb 调试 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13520085/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com