openwrt之gdb

参考文章

① GNU Debugger
② gdb中忽略信号处理

运行调试

  • 本地调试

    本地调试时,可执行文件必须自带符号表。编译时候指定
    本地调试启动方式如下:

    gdb application
    (gdb) set args [arg1] [arg2] [arg3] ...

    与远程调试不同的是,应用参数列表通过set args命令指定。

  • 远程调试

编译openwrt时,为了节约空间,基本都会开启strip选项。调试过程中都使用远程调试。下面时开启strip的选项。

Global build settings  --->
    Binary stripping method (strip)  --->
        ( ) none
        (X) strip

远程调试启动方式如下:
目标机

gdbserver :9000 application args

gdbserver为目标机上的调试服务程序。9000为服务端口。application是需要调试的应用。args为参数列表(以空格或tab键分割)。绝对路径和相对路径都可以。
pc机

./scripts/remote-gdb 192.168.13.226:9000 build_dir/[target path]/[package path]/application

pc机端运行方式比较注意。需要在openwrt的源码目录执行。192.168.13.226:9000为目标机的地址和端口。build_dir/[target path]/[package path]/application为没有strip的可执行文件。容易明白,这样其实是指定了执行文件的符号表。

  • 库索引路径
set solib-search-path <your-path>

如果没有strip的库文件存在于其他路径。可以通过该方式指定。

调试方法

  • 命令列表

※handle
使用方法 handle SIGNAL [ACTIONS]
参数说明
@SIGNAL 被关注的信号;
@ACTIONS 被关注的行为,包括”stop”, “nostop”, “print”, “noprint”,”pass”, “nopass”, “ignore”, or “noignore”。”stop”代表信号发生时,暂停应用进入gdb命令行。”print”代表信号发生时,gdb输出日志。”pass”代表传递给应用,反之被关注信号对于应用被屏蔽。”ignore”为”nopass”同义词。”noignore”为”pass”同义词。

调试技巧

  • 信号处理

当应用使用了信号作为进程通信方式的时候,gdb会受信号干扰而暂停运行。这往往并不是调试者想要的。所以调试者必定想要一种自定义接收到信号之后的动作。通过handle命令可以实现调试者的目的。

默认处理方式可以通过以下两种方式获取。

info signals
info handle
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值