description: kgdb 远程调试实例

来源:互联网 发布:适用于mac的办公软件 编辑:程序博客网 时间:2024/06/04 23:25
/*********************************************************************************
 * author: hjjdebug
 * date: 2013
 * description: kgdb 远程调试实例
/*********************************************************************************
使用简介:
target 端
执行一下 make init,  整个调试过程只执行一次
以后,想调试执行./debug  等待host 端连接
host 端: 执行./debug, 与target 端建立连接。
开始gdb 调试过程
下面详细介绍一下这些命令序列


target 端:
1. 初始化操作命令
例如:用串行口1来通讯,并设置串行口1的波特率
执行 make init. 就是执行如下shell 命令完成远程调试初始化命令
init:
    stty ispeed 115200 ospeed 115200 < /dev/ttyS1
    stty < /dev/ttyS1
    echo "ttyS1" > /sys/module/kgdboc/parameters/kgdboc

2. 激活kgdb 等待远程连接
执行完 debug 命令, 客户端将进入假死状态,等待host 端gdb 连入
root@ubuntu:/home/hjj/software/myuxfs# cat debug
#!/bin/bash
echo "g" > /proc/sysrq-trigger


host 端:
简单的执行 debug 命令, 完成gdb远程连接
hjj@ubuntu:~/software/refuxfs$ cat debug
#!/bin/bash -v
ddd /usr/src/linux/vmlinux -x gdbinit


可见调试模块就是调试内核。

看到就是运行gdb 命令(ddd 是gdb的图形化前端,更好用)。
若坚持用gdb, 也可,ctrl-x ctrl-a 组合可以调出gdb 图形界面,方便浏览代码。
图形乱了,用ctrl-l 刷新一下。 不一定保证一定好使呦.
gdb 的一些初始化命令,我们放到了gdbinit 中
hjj@ubuntu:~/software/refuxfs$ cat gdbinit
set remotebaud 115200
target remote /dev/ttyS1
add-symbol-file myuxfs.ko 0xe08d1000 -s .exit.text 0xe08d33a8

b ux_write_inode
#b  ux_block_alloc
# ux_file
b    ux_get_block
b ux_file_aio_write

set print pretty
set logging overwrite on
set logging on

技巧1. 动态的改变gdbinit 命令文件
看到我们设置了串口波特率,指定了调试串口,设置了断点, 设定了一些显示属性。
有趣的是加入了一条添加模块符号表命令 add-symbol-file .... ,这是一个动态命令,每次加载模块会改变
需要用sh 命令自动生成的。
看一下下面的命令序列,它把target 端的 merge_sections 合并到了gdbinit 当中, 并与旧的文件进行了比较,使我们一目了然。
edit:
    cp /mnt/hgfs/vm/merge_sections .
    cp gdbinit gdbinit.bak
    sed -n '/add-symbol-file/!p;/add-symbol-file/rmerge_sections' gdbinit > gdbinit.1
    mv gdbinit.1 gdbinit
    diff gdbinit gdbinit.bak

它运用了 sed 从一个文件中a.txt读取内容,穿插到另一个文件中b.txt。 输出再重定向到c.txt 中
----------------------------------------
sed -n '/wflag_begin/,/wflag_end/!p;/wflag_begin/ra.txt' b.txt

技巧2: target 端, merge_sections 的生成
hjj@ubuntu:~/software/myuxfs$ cat merge_sections
add-symbol-file myuxfs.ko 0xe08d1000 -s .exit.text 0xe08d33a8
hjj@ubuntu:~/software/myuxfs$ cat sections
0xe08d1000
0xe08d33a8
看到了吗? 从sections 文件如何生成 merge_sections 文件。 我为此还特别用perl 写了一个转化工具。
不过,用sed 可以一句话搞定这个文件转化。下面共同欣赏一下:
hjj@ubuntu:~/software/myuxfs$ echo "add-symblo-file myuxfs.ko `sed -n  1p  sections` -s .exit.text `sed -n  2p sections`" > merge_sections

其它问题:
关于sections 文件的生成如下
    cat /sys/module/myuxfs/sections/.text > sections
    cat /sys/module/myuxfs/sections/.exit.text >> sections
其它诸如显示,copy 等命令可以自行组织在Makefile 中, 方便我们操作就可以了。


原创粉丝点击