2013-10-26 87 views
0

我用C編寫了一個shell。在它上運行一些程序時出現了一些問題。如何在gdb中調試shell時在shell上運行程序?正在運行另一個程序的調試程序

+1

在這裏發表問題之前,應該做一些努力。 –

回答

1

您可以通過gdb附加到已經從另一個控制檯運行的shell進程。這樣你的shell輸出不會干擾gdb輸出,並且你可以照常在shell中運行程序。

  1. 運行你的shell執行在第1控制檯窗口
  2. 打開第二個控制檯,找到使用ps命令
  3. 開始gdb在第二個控制檯和attach殼已經運行殼的PID號使用它就像PID號這樣的:

    :〜$ GDB -q
    (GDB)連接3479
    附加到進程3479

  4. 現在你可以設置斷點,並繼續shell執行:

    (GDB)b SomeFunction
    (GDB)C
    繼續。

從這一點來說,你有2個控制檯:

  • 的一個地方你的shell運行
  • 和第二地方gdb運行安裝到外殼

您可以使用shell像往常一樣:在其上運行其他程序或執行其他任何操作。同時您可以在gdb內的第二個控制檯中觀察shell執行情況。重點是這兩個進程的輸出是相互分離的,如果你只在一個控制檯中直接在gdb中運行shell,那麼這是不可能的。

+0

我不明白你在說什麼......多解釋一下.. –

+0

@Grijesh Chauhan,我的意思是很難從gdb運行的同一個控制檯調試交互式shell,因爲gdb本身是交互式的。來自gdb和shell的輸出會混淆,並且在調試過程中會遇到困難。 – ks1322

+0

請解釋。這是我需要的。 – mohit

相關問題