gdb+gdbserver调试

2023-10-25 10:58
文章标签 调试 gdb gdbserver

本文主要是介绍gdb+gdbserver调试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

gdb+gdbserver 是调试目标板的常用方法.
看了网上的一些资料,加上我自己的一些体会, 写个完整的记录吧:
我的环境如下:HOST 192.168.0.33 Target: 192.168.0.34
NFS共享目录: mount -t nfs -o nolock /home/itlanger/work /mnt


编译arm-gdb:
下载gdb源代码:

$ cd downloads

$ wget -t 0 -w 30 -c http://ftp.gnu.org/gnu/gdb/gdb-6.6.tar.gz
tar zxvf gdb-6.6.tar.gz
cd gdb-6.6
./configure --target=arm-linux --prefix=/usr/local/arm-gdb -v

make
sudo make install
export PATH=$PATH:/usr/local/arm-gdb
编译arm-gdb-server
cd ~/downloads/gdb-6.6/gdb/gdbserver
./configure --target=arm-linux --host=arm-linux
make CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc ##这里是交叉编译器的路径
cp gdbserver ~/work ##gdbserver是编译生成的
export PATH=$PATH:/usr/local/arm-gdb/bin (最好加到.bashrc中)

拷贝libthread库(这一步不做的话,运行gdbserver会出错!)
$ cd /usr/local/arm/3.4.1/arm-linux/lib
$ ls -l libthread_db*
-rwxr-xr-x 1 2619 man 29151 2004-07-28 23:08 libthread_db-1.0.so
lrwxrwxrwx 1 2619 man    17 2008-05-25 12:00 libthread_db.so -> libthread_db.so.1
lrwxrwxrwx 1 2619 man    19 2008-05-25 12:00 libthread_db.so.1 -> libthread_db-1.0.so

$ cp libthread_db-1.0.so ~/work

minicom下:
# cd /lib/
# cp /mnt/libthread_db-1.0.so /lib/
# ln -s libthread_db-1.0.so libthread_db.so.1
# ln -s libthread_db-1.0.so libthread_db.so
测试
写一个程序, 用arm-linux-gcc -g 编译, 放到work目录下, (我的为third)

minicom下: 

cd /mnt

./gdbserver 192.168.0.33:6666 third
Process third created; pid = 356
Listening on port 6666
终端下:
export PATH=$PATH:/usr/local/arm-gdb/bin
cd ~/work
arm-linux-gdb third
GNU gdb 6.6
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-linux"...
(gdb)

(gdb) target remote 192.168.0.34:2345       ##(连接目标)
Remote debugging using 192.168.0.34:2345
0x40000dd0 in ?? () from /lib/ld-linux.so.2
现在可以通过l, b 设置断点了
运行: 用命令c    ##记住这里不是用run, 因为程序已在Target Board上面由gdbserver启动了。结果输出是在Target Board端

这样就可以用emacs方便地远程调试了。
M-x gdba ##(我已经绑定到F10了)

Run gdba (like this): arm-linux-gdb -annotate=3 third

这篇关于gdb+gdbserver调试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/282087

相关文章

IDEA如何实现远程断点调试jar包

《IDEA如何实现远程断点调试jar包》:本文主要介绍IDEA如何实现远程断点调试jar包的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录问题步骤总结问题以jar包的形式运行Spring Boot项目时报错,但是在IDEA开发环境javascript下编译

Python MCPInspector调试思路详解

《PythonMCPInspector调试思路详解》:本文主要介绍PythonMCPInspector调试思路详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录python-MCPInspector调试1-核心知识点2-思路整理1-核心思路2-核心代码3-参考网址

Linux系统调试之ltrace工具使用与调试过程

《Linux系统调试之ltrace工具使用与调试过程》:本文主要介绍Linux系统调试之ltrace工具使用与调试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、ltrace 定义与作用二、ltrace 工作原理1. 劫持进程的 PLT/GOT 表2. 重定

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

前端bug调试的方法技巧及常见错误

《前端bug调试的方法技巧及常见错误》:本文主要介绍编程中常见的报错和Bug,以及调试的重要性,调试的基本流程是通过缩小范围来定位问题,并给出了推测法、删除代码法、console调试和debugg... 目录调试基本流程调试方法排查bug的两大技巧如何看控制台报错前端常见错误取值调用报错资源引入错误解析错误

使用C/C++调用libcurl调试消息的方式

《使用C/C++调用libcurl调试消息的方式》在使用C/C++调用libcurl进行HTTP请求时,有时我们需要查看请求的/应答消息的内容(包括请求头和请求体)以方便调试,libcurl提供了多种... 目录1. libcurl 调试工具简介2. 输出请求消息使用 CURLOPT_VERBOSE使用 C

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依