首页 文章

如何在bash脚本中使用gdb运行带有命令行args的程序?

提问于
浏览
291

通常,在gdb上运行程序时,程序的参数在 run 命令中给出 . 有没有办法使用gdb运行程序,并在shell脚本中提供参数?

我在相关问题中看到了一个答案,提到我们可以在脚本开始执行后将gdb附加到程序中 . 但接下来我将不得不“等待”该计划 .

我很好奇是否还有其他方法可以做到这一点 .

6 回答

  • 409

    你可以使用--args参数运行gdb,

    gdb --args executablename arg1 arg2 arg3
    

    如果您希望它自动运行,请将一些命令放在一个文件中(例如'run')并将其作为参数:-x / tmp / cmds . 您可以选择使用-batch模式运行 .

    gdb -batch -x /tmp/cmds --args executablename arg1 arg2 arg3
    
  • 8

    gdb有 --init-command <somefile> ,其中somefile有一个要运行的gdb命令列表,我用它在我的代码中有 //GDB 注释,然后`

    echo "file ./a.out" > run
    grep -nrIH "//GDB"|
        sed "s/\(^[^:]\+:[^:]\+\):.*$/\1/g" |
        awk '{print "b" " " $1}'|
        grep -v $(echo $0|sed "s/.*\///g") >> run
    gdb --init-command ./run -ex=r
    

    作为脚本,它将命令加载调试符号,然后生成一个break命令列表,为每个 //GDB 注释设置一个断点,并启动它运行

  • 85

    您可以使用上下文创建一个文件:

    run arg1 arg2 arg3 etc
    
    program input
    

    并调用gdb之类的

    gdb prog < file
    
  • 28
    gdb -ex=r --args myprogram arg1 arg2
    

    -ex=r-ex=run 的缩写,告诉gdb立即运行您的程序,而不是等待您在提示符下键入"run" . 然后 --args 表示随后的所有内容都是命令和参数,就像您通常在命令行提示符下键入它们一样 .

  • 1

    Hugo Ideler答案的补充 . 当使用具有自己前缀的参数如 --- 时,我不确定与gdb冲突 .

    似乎gdb将 args 选项后的所有选项作为程序的参数 .

    起初我想确定,我在你的args周围用引号运行gdb,它在发布时被删除 .

    这也有效,但可选:

    gdb --args executablename "--arg1" "--arg2" "--arg3"
    

    这不起作用:

    gdb --args executablename "--arg1" "--arg2" "--arg3" -tui
    

    在这种情况下, -tui 用作我的程序参数而不是gdb .

  • 1

    另一种方法,我个人觉得稍微更方便和直观(不必记住 --args 参数),是正常编译,并直接在 gdb 内使用 r arg1 arg2 arg3 ,如下所示:

    $ gcc -g *.c *.h
    $ gdb ./a.out
    (gdb) r arg1 arg2 arg3
    

相关问题