2017-08-12 81 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