技术标签: linux core查看IP
交叉编译gdb和gdbserver
1、下载gdb:
下载地址为:http://ftp.gnu.org/gnu/gdb/
按照一般的想法,最新版本越好,因此下载7.2这个版本。当然,凡事无绝对。
我们以gdb-7.2.tar.bz2 这个文件为例。
2、解压缩:$ tar jxvf gdb-7.2.tar.bz2
注:小技巧:Linux下一般压缩文件后缀为.tar.bz2和.tar.gz,它们解压命令有两三个选项是一致的:
xf(v),前者再加上j选项,后者再加上z选项。
3、进入该目录$ cd gdb-7.2/
4、配置$./configure --target=arm-linux --program-prefix=arm-linux- --prefix=/usr/local/arm-gdb
注:--target=arm-linux意思是说目标平台是运行于ARM体系结构的linux内核;--program-prefix=arm-linux-是指生成的可执行文件的前缀,比如arm-linux-gdb,--prefix是指生成的可执行文件安装在哪个目录,这个目录需要根据实际情况作选择。如果该目录不存在,会自动创建,当然,权限足够的话。
5、编译、安装$ make
$ make install
幸运的话,会在--prefix指定的目录下生成三个子目录:bin、lib、share,我们需要的arm-linux-gdb就在其中的bin目录下。
如果你不小心查看它的大小的话,会发觉它有14MB那么大!天呐!怎么会占这么多空间?没关系,我们可以为它瘦身。没错!就是使用strip命令!$ strip arm-linux-gdb -o arm-linux-gdb-stripped
$ ls -lh
总计 33M
-rwxr-xr-x 1 latelee root 14M 2021年05月10日 16:16 arm-linux-gdb
-rwxr-xr-x 1 latelee root 3.1M 2021年05月10日 16:25 arm-linux-gdb-stripped
可以看到,strip后的文件大小只有3.1MB,瘦身效果明显!如果做广告的话,绝对有说服力。
这个文件就是我们以后远程调试时在主机上运行的交叉调试器了:在主机上执行,调试的却是另一种体系结构的代码。但是,光有主机的调试器还不够。还需要在目标板上运行一个叫gdbserver的东东。这个东东是怎么来的呢?
1、在刚才那个gdb解压后的目录:gdb-7.2,进入./gdb/gdbserver子目录gdbserver1、cd gdb/gdbserver/2、配置: ./configure --target=arm-hismall-linux --host=arm-hismall-linux--prefix=/mnt/hgfs/vmshare/gdbserver7.41/(同样,target 和 host 为你的交叉编译器, prefix为安装的目录)3、编译: make CC=make CC=arm-hismall-linux-gcc出现错误:linux-arm-low.c: In function `arm_stopped_by_watchpoint':linux-arm-low.c:642: error: `PTRACE_GETSIGINFO' undeclared (first use in this function)linux-arm-low.c:642: error: (Each undeclared identifier is reported only oncelinux-arm-low.c:642: error: for each function it appears in.)解决方法:这里提示没有PTRACE_GETSIGINFO这个东西,这里搜索PTRACE_GETSIGINFO的路径为-I指定的头文件以及交叉 编译工具链,我们不妨到交叉编译工具链里面去查找一下:cd /usr/local/arm/3.4.5/grep "PTRACE_GETSIGINFO" * -nR找到如下信息:arm-linux/sys-include/linux/ptrace.h:27:#define PTRACE_GETSIGINFO 0x4202arm-linux/include/linux/ptrace.h:27:#define PTRACE_GETSIGINFO 0x4202distributed/arm-linux/sys-include/linux/ptrace.h:27:#define PTRACE_GETSIGINFO 0x4202distributed/arm-linux/include/linux/ptrace.h:27:#define PTRACE_GETSIGINFO 0x4202说明PTRACE_GETSIGINFO是在交叉编译工具链:linux/ptrace.h文件里定义的,那么可能是头文件没有包含好吧!我们到gdbserver下的linux-arm-low.c里面一看,可不是嘛,只有:#include 而没有:#include,于是在linux-arm-low.c文件中加上:#include ,再次编译:make CC=/usr/local/arm/3.4.5/bin/arm-linux-gcc成功!
32位,ARM平台,动态链接,未strip。
同样,我们也减小它的体积:
# arm-hismall-linux-strip gdbserver
[[email protected] gdbserver]# ls gdbserver -l
-rwxrwxrwx 1 root root 498279 2021年05月10日 06:21 gdbserver
[[email protected] gdbserver]# ls gdbserver -l
-rwxrwxrwx 1 root root 209048 2021年05月10日 06:53 gdbserver
瘦身效果同样那么明显!
注意,这里必须使用strip的交叉版本,也就是你交叉编译器带的strip工具,我的是arm-hismall-linux-strip。
[[email protected] gdbserver]# file gdbservergdbserver: ELF 32-bit LSB executable, ARM, version 1, dynamically linked (uses shared libs), stripped
到此,我们生成了两个重量级别的文件:arm-linux-gdb和gdbserver。它们的版本是一致的,这一点非常重要。我们需要将gdbserver下载到开发板中,——可以通过各种各样的手段,包括但不限于NFS。调试时需要在开发板中运行这个程序。同时在主机中执行arm-linux-gdb调试器。
GDB+GDBServer的使用
在目标系统上启动gdbserver,其实就是在超级终端下或者minicom下启动gdbserver。这里将gdbserver放在宿主机的NFS设置的共享目录下/home/zzl,该目录挂载在目标板/work下。宿主机的ip为192.168.1.1,目标板的ip为192.168.1.33
超级终端或者minicom下
[[email protected]]cd /work
[[email protected]]./gdbserver 192.168.1.1:1234 hello
出现提示:
Process /work/hello created: pid=69
Listening on port 1234
这时切换到宿主机的控制台,运行
[[email protected]] arm-softfloat-linux-gnu-gdb hello
(gdb) target remote 192.168.2.33:1234
出现提示:
Remote debugging using 192.168.1.33:1234
[New thread 80]
[Switching to thread 80]
0x40002a90 in ??()
同时在minicom下提示:
Remote debugging from host 192.168.2.100
(gdb)
连接成功,这时候就可以输入各种gdb命令如list、continue、next、step、break等进行程序调试了。
使用GDB调试core文件
$ gdb --core=core.9128
GNU gdb Asianux (6.0post-0.20040223.17.1AX)
Copyright 2004 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 "i386-asianux-linux-gnu".
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
#0 0x08048373 in ?? ()
(gdb) bt
#0 0x08048373 in ?? ()
#1 0xbfffd8f8 in ?? ()
#2 0x0804839e in ?? ()
#3 0xb74cc6b3 in ?? ()
#4 0x00000000 in ?? ()
此时用bt看不到backtrace,也就是调用堆栈,原来GDB还不知道符号信息在哪里。我们告诉它一下:
(gdb) file ./a.out
Reading symbols from ./a.out...done.
Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) bt
#0 0x08048373 in sub () at foo.c:17
#1 0x08048359 in main () at foo.c:8
此时backtrace出来了。
(gdb) l
8 sub();
9 return 0;
10 }
11
12 static void sub(void)
13 {
14 int *p = NULL;
15
16
17 printf("%d", *p);
(gdb)
对于GDBServer出现的问题
1. GDBServer调试时出现packet error问题。
主要是虚拟机与目标机的网络连接要经过windows,数据包容易丢失。换到Linux系统下则恢复正常。
PyQt5是一个用于创建图形用户界面(GUI)的Python库。它是基于Qt库的,Qt是一个用于创建跨平台应用程序的C++库。PyQt5允许开发人员使用Python语言创建功能强大的应用程序PyQt5是一个用于创建图形用户界面(GUI)的Python库。
最近面试还是经常看到一些面试官问器件选型,当然,这种问题只能吓唬应届生,这里就为各位补充这个书本上没有的知识吧。一、工程背景。 首先要清楚产品/项目的定位,民用、工用、军用,考虑的都不太一样。 民用,即消费级,对成本要求高,功能勉强能满足,性能要求不高。 工用,即工业级,成本相对充裕,功能及性能要求较高,会充分考虑可靠性。 军用,...
Linux系统下安装Jdk1.8详细步骤一.安装准备1.JDK 安装包官网地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html百度网盘地址:https://pan.baidu.com/s/13uBKiqyIFvPz12QtnnTPFQ提取码:mvze2.Centos7系统二.安装步骤1.选择SSH工具上传安装包到Linux系统上(FileZilla或者Xftp)2.上传成功后如下图所示
报错信息zlog.c:(.text+0xb): undefined reference to `pthread_getspecific'../../xstudiopro-utility/lib/Linux_x86_64/libzlog.a(zlog.o): In function `zlog_init_inner':zlog.c:(.text+0xbd): undefined reference to `pthread_key_create'../../xstudiopro-utility/lib/
为什么80%的码农都做不了架构师?>>> ...
2018年写了一个标签打印机(TSC TX600),标签打印程序,实现功能是通过串口读出设备ID生成二维码和设备信息,用于esp8266 smart config配网。源码和资料:https://download.csdn.net/download/u012854263/12080191package com.aiyun.print;import java.awt.print.Bo...
支持完善的账号管理功能、用户的并发处理、用户详细控制例如上行 下行 目标等。支持批量的筛选管理可快速批量流畅控制、可查看当用用户 组 全局等信息处理。提供了本地完善基础支持、可实现快速本地IP添加、批量处理、本地验证等。可对系统进行自定调整系统性能、支持资源自动回收处理、支持高效稳定的处理。支持开发人员快速对接处理、实现开发者的自控、自定使用、快速高效的处理。您仅需一
剪映字幕翻译及SRT字幕导出功能:剪映字幕翻译及SRT字幕导出功能,更加方便的制作视频,更快捷的方式完成剪映字幕翻译及导出【无字幕英语翻译中文字幕】剪映怎么把无字幕的外文视频翻译成制作成字幕?打开电脑版剪映 导入视频 文本 智能字幕 识别字幕 识别完成后 右上角处草稿参数一栏 就是字幕保存在本地的位置 按照这个位置打开相应文件夹 复制文件夹地址 进入网址 把刚才复制的保存位置处的地址粘贴进去,并选...
本为引用了微芯应用笔记 :AN699文档 地址为https://ww1.microchip.com/downloads/en/Appnotes/00699b.pdf介绍模拟滤波器几乎可以在每一个电子电路中找到。音频系统使用它们进行预放大、均衡和音调控制。在通信系统中,滤波器用于调谐特定的频率并消除其他频率。数字信号处理系统使用滤波器来防止带外噪声和干扰的混叠。本应用笔记研究减少数据采集系统中外来噪声影响的模拟滤波器的设计。...
本文配置环境:Windows10+PhpStudy 2018(PHP5和PHP7都适用)+PhpStorm如果你的PhpStudy没有自带XDebug或者自带的不管用参考下面下载:XDebug下载地址:https://xdebug.org/download/historicalXDebug下载可能需要科学上网,下不了的同学可以使用下面我下好的:链接:https://pan.baidu.com/s/1tAcn1qgD-z04haaAU0JN4Q提取码:75sg启动PhpStudy的XDebug
使用Set(迭代需要去重的数组)new Set(a)赋值给一个Set结构的blet b = new Set(a)使用Array.from转换为数组结构b = Array.from(b)const a = [1, 3, 3, 1]; let b = new Set(a); //数组a为可迭代对象,b此时为Set结构 b = Array.from(b); //Set为可迭代对象,b此时为数组结构 console.log(b);...
1、前言网上已经有大量的web端接口解析的方法了,但是对客户端的接口解析基本上找不到什么资料,本文主要分析网易云音乐PC客户端的API接口交互方式。通过内部的代理设置,使用fiddler作为代理工具,即可查看交互流程:可以大致看一下交互方式,通过HTTPS POST交互,POST了一串params的内容,内容加密,返回JSON内容,我要做的重点就在于解析params的生成方式,用于模拟这次交互。 ...