gdb qemu调试linux kernel并修改远程连接的bug
2015-10-27 12:28
423 查看
0.prepare
make defconfigmake menuconfig
make
1.qemu
qemu-i386* -kernel arch/x86/boot/bzImage -initrd /boot/initrd.img-2.6.31-22-generic -gdb tcp::1234 -S2.gdb
file vmlinuxtarget remote:1234
b func
c
b|set breakpoint
c|continue
s| one lien src,into the func
n|next over the func
si|stepi,one instrument ,into func
ni|nexti,one instrument ,over the func
finish|dbg to return
p|print
display|display
4.fix bug
~~~~ubuntu12.04的是7.4的gdb,里边在和qemu远程链接的时候会有问题。需要重新编译修改gdb源码。
由于7.4是没有源码的,所以自己搞一个7.6的gdb,来重新配置和编译。
参考网上的方法:
GDB远程调试错误解决
使用GDB 7.2版本进行远程调试时出现:Remote ‘g’ packet reply is too long错误,需要修改gdb代码解决,办法是:修改gdb/remote.c文件,屏蔽process_g_packet函数中的下列两行:
if (buf_len > 2 * rsa->sizeof_g_packet)
error (_(“Remote ‘g’ packet reply is too long: %s”), rs->buf);
在其后添加:
if (buf_len > 2 * rsa->sizeof_g_packet) {
rsa->sizeof_g_packet = buf_len ;
for (i = 0; i < gdbarch_num_regs (gdbarch); i++) {
if (rsa->regs.pnum == -1)
continue;
if (rsa->regs.offset >= rsa->sizeof_g_packet)
rsa->regs.in_g_packet = 0;
else
rsa->regs.in_g_packet = 1;
}
}
修改后,会提示regs是个指针了,就把所有涉及到的成员用->代替.
编译&安装
~~~~
./configure –prefix=$(pwd)/tmp
sudo chmod 777 tmp/
cp
~~~
因为PATH路径下已经有了gdb了,该一个名字到环境变量下:
sudo cp /tmp/bin/gdb /bin/gdb-7.6
sudo cp /tmp/bin/gdbserver /bin/gdbserver-7.6
和qemu链接
~~~~~~
在vmlinux路径下(一般是在kernel编译出到源码根目录下)
(前提先打开qmeu)
gdb-7.6
file vmlinux
target remote:1234
make && make install
相关文章推荐
- 图解linux启动过程
- IO的同步异步、阻塞非阻塞
- 第 四 十 二 天:samba 的 相 关 问 题
- 修改服务器22端口, 以防止暴力破解
- U盘安装centos6.5教程(两种实现方法)
- [转] linux中常用的命令
- linux环境 添加新硬盘、分区和挂载
- CentOS 6.5系统安装配置图解教程
- SystemTap Errors Introduce
- linux命令---复制和移动文件 cp和mv
- linux目录结构详细介绍
- [Gearman] centos上Gearman的安装
- Linux编程基础——GDB(设置断点)
- 【转】linux 中fork()函数详解
- [Linux] vim的高亮查找操作
- Linux运维第三阶段(十)POSTFIX
- centos6.5 安装svn可视化管理工具 if.svnadmin
- linux系统启动过程(详解)
- Linux awk
- 推荐一个学习linux 命令比较好多方式