2017-08-12 56 views
1

我的意圖如下。我正在調試一個用.c腳本中的gcc編譯的目標文件。讓我們把這個編譯腳本稱爲「foo」。當我從我的終端在Mac上運行命令:BASH從GDB讀取提示

gdb -q ./foo 

我得到的輸出:

Reading symbols from ./foo...Reading symbols from /Users/john/Documents....done. 
done. 

我立刻得到了殼的提示看起來像這樣:

(gdb) "Shell waiting for my input command here from keyboard" 

在這一點上,我想自動化輸入某些命令,如: break,list,x/x「.c文件中的符號」,「.c文件中的x/s」符號等等。對於這種自動化我想用一個小bash腳本,到目前爲止,我有以下幾點:

#!/bin/bash 

SCRIPT=$1 
gstdbuf -oL gdb -q $SCRIPT | 
     while read -r LINE 
     do 
      echo "$LINE" 
     done 

在執行這個bash腳本的時候,我看到我的終端的外殼下面的輸出:

Reading symbols from ./foo...Reading symbols from /Users/john/Documents....done. 
done. 

但我沒有看到:

(gdb) "Shell waiting for my input command here from keyboard" 

我如何才能檢測到來自gdb的過程這提示在我的shell腳本可以命令自動我想他們輸入代替手動?

非常感謝!

+0

請從這裏刪除'c'標籤。 – Serge

+1

也許你想要「期望」包。 –

+0

我不明白爲什麼一些堆棧溢出的人需要對關於問題的非重要細節如此討厭。如果我在問題中加上「C」標籤是因爲有很多人知道C並經常使用bash,所以他們可能會以某種方式指導我。我們不是都在這裏互相幫助並學習嗎? @Serge –

回答

0

您可以創建一個文件.gdbinit並將初始命令放在那裏。 gdb將執行他們在啓動時如果添加以下行$HOME/.gdbinit

add-auto-load-safe-path /path/to/project/.gdbinit 

現在,你可以把命令到/path/to/project/.gdbinit,像這樣:

break main 
run --foo=bar