bash - 使用 bash 编写 Gdb 脚本

标签 bash gdb core

我正在尝试编写一个脚本来分析核心转储。到目前为止我已经想出了这个脚本。

#!/bin/bash

#
# A script to extract core-file informations
#

#Binary image
binimg=$1

# Today and yesterdays cores
core=$2

gdblogfile="$core-gdb.log"
rm -f $gdblogfile

gdb -batch \
    -ex "set logging file $gdblogfile" \
    -ex "set logging on" \
    -ex "set pagination off" \
    -ex "file $binimg" \
    -ex "core-file $core" \
    -ex "bt" \
    -ex "quit"

当我尝试执行它时,出现以下错误: 文件“quit”不存在或不是常规文件。

你能告诉我我做错了什么吗?

最佳答案

您的 gdb 版本可能有问题(您使用的是哪个版本)?我可以使用 gdb 6.3 重现您的错误,但不能使用 7.6 重现您的错误。无论如何,看起来 gdb,即使你已经以批处理模式启动它,仍然认为最后一个参数“quit”是图像的文件名(并且它试图加载它,并提示它不能)找不到)。因此,要按照 gdb 的预期进行操作,只需像平常一样传入镜像和核心文件(并删除 "ex file""ex core-file"参数)。看看这样的东西是否适合您:

gdb -batch \
    -ex "set logging file $gdblogfile" \
    -ex "set logging on" \
    -ex "set pagination off" \
    -ex bt \
    -ex quit \
    "$binimg" \
    "$core"

关于bash - 使用 bash 编写 Gdb 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20939627/

相关文章:

linux - 从 .sh 脚本打开新终端后,.sh 脚本中的源代码不起作用

c - 简单的缓冲区溢出漏洞利用 shellcode 不起作用

c - GDB 影响 setcontext 结果

swift - 使用 MusicSequence 初始化 AVMIDIPlayer

bash - 如何在 awk 脚本中使用 shell 变量?

bash - 如何可靠地 rm -fr *?

c - 带有循环的 Makefile

c++ - 为什么GDB尝试列出不存在的 header ?

Linux 服务崩溃

c++ - basic_string.tcc 中的核心转储 - 优化了