0

我用C写了一个shell。在上面运行一些程序时出现了一些问题。如何在gdb中调试shell时在shell上运行程序?

4

2 回答 2

1

首先使用-g选项编译调试标志,用于gdb.

然后运行。

gdb shellapp
...
run someapps
...

快速阅读如何在 6 个简单步骤GDB 教程中使用 gdb 调试 C 程序

还是您的意思是在后台运行程序

于 2013-10-26T07:40:39.137 回答
1

您可以通过 gdb 从另一个控制台附加到已经运行的 shell 进程。这样你的 shell 输出不会干扰 gdb 输出,你可以像往常一样在 shell 中运行程序。

  1. 在第一个控制台窗口中运行你的 shell 实现
  2. ps打开第二个控制台并使用命令查找已经运行的 shell 的 pid 号
  3. gdb从第二个控制台开始并使用它的 pid 号附加到 shell,如下所示:

    :~$ gdb -q
    (gdb) attach 3479
    附加到进程 3479

  4. 现在您可以设置断点并继续执行 shell:

    (gdb) b SomeFunction
    (gdb) c
    继续。

从这一点开始,您有 2 个控制台:

  • 你的 shell 正在运行的那个
  • 第二个gdb连接到外壳的地方

您可以像往常一样使用 shell:在其上运行其他程序或执行其他任何操作。同时你可以在里面的第二个控制台观察 shell 的执行gdb。关键是这两个进程的输出是相互分离的,如果您直接在 gdb 中仅在一个控制台中运行 shell,这是不可能的。

于 2013-10-26T07:42:01.003 回答