精华内容
下载资源
问答
  • windows下编译gdb源码

    2020-04-11 22:29:13
    在学习编译gdb的过程中,一定要和本文出现的各软件版本保持一致,否则很容易因为版本的原因出现一些奇怪的问题。 1.搭建msys2环境 在win下编译gdb首先要搭建msys2的开发环境,先从官网下载msys2-i686-20190524.exe ...

    此文已过期,仅供参考

    可以看我新写的文章
    搭建msys2基础开发平台

    -----------更新-------------

    由于gdb8.2.1使用g++编译,编译速度很慢,即使什么都没改也要编译20分钟,所以建议gdb更换为gdb-7.9-2,python3更换为python2,版本为python2-2.7.13(更新版本会出现无法识别的情况)

    1.搭建msys2环境

    在学习编译gdb的过程中,一定要和本文出现的各软件版本保持一致,否则很容易因为版本的原因出现一些奇怪的问题。

    在win下编译gdb首先要搭建msys2的开发环境,先从官网下载msys2-i686-20190524.exe
    https://www.msys2.org/
    官网以后会更新版本,为了和本文写的版本保持一致,最好在清华镜像站找到msys2-i686-20190524.exe版本下载:
    https://mirrors.tuna.tsinghua.edu.cn/msys2/distrib/i686/
    这里为了避免不必要的麻烦,所有软件都选32位的,即使电脑是64位的也选32位安装。

    下载后直接安装即可,然后需要配置pacman软件源镜像,使用的是清华的开源镜像(msys2官方的源很慢),步骤如下

    编辑 /etc/pacman.d/mirrorlist.mingw32 ,在文件开头添加:
    Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686
    编辑 /etc/pacman.d/mirrorlist.mingw64 ,在文件开头添加:
    Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64
    编辑 /etc/pacman.d/mirrorlist.msys ,在文件开头添加:
    Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
    

    注意: 这里不建议执行 pacman -Sy 刷新软件包数据,因为刷新后接下来安装liblzma-devel是最新的版本,与xz的依赖不兼容

    2.安装gcc和make

    配置好后需要用pacman安装gcc和make,使用如下命令
    pacman -S gcc
    在这里插入图片描述
    以上命令是下载默认的gcc版本,不同的电脑上可能存在差异,所以最好到以下网站下载gcc-7.4.0-1的安装包
    https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/i686/
    假设放在E:\download\gcc-7.4.0-1-i686.pkg.tar.xz,则安装命令是
    pacman -U /e/download/gcc-7.4.0-1-i686.pkg.tar.xz
    在这里插入图片描述
    同理安装make也是先下载安装包make-4.2.1-1-i686.pkg.tar.xz,然后在本地安装
    pacman -U /e/download/make-4.2.1-1-i686.pkg.tar.xz
    如果使用pacman -S make命令安装可能会和我的版本不一样

    3.下载gdb源码包

    我下的版本是gdb-8.2.1-2.src.tar.gz,地址如下
    https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/sources/

    4.编译源码

    把之前下载的包解压,我的是放在E:\source\gdb-8.2.1-2.src\gdb,然后进入该目录,执行makepkg
    在这里插入图片描述
    可以看到出错了,出错的原因是缺少依赖,所以要先安装各依赖

    pacman -S expat
    pacman -S python3
    pacman -S libiconv-devel zlib-devel ncurses-devel liblzma-devel libexpat-devel libreadline-devel
    

    当然也可以本地安装

    pacman -U /c/Users/Administrator/Downloads/expat-2.2.6-1-i686.pkg.tar.xz
    pacman -U /c/Users/Administrator/Downloads/python-3.7.3-1-i686.pkg.tar.xz
    

    这是我安装的版本(注:如果刷新软件源后,liblzma-devel的版本是5.2.5-1,与xz依赖不兼容,这时不要选择更新xz,而应该本地安装liblzma-devel-5.2.4-1)
    在这里插入图片描述
    注意到python3安装的版本是python-3.7.3-1,这是一个最大的坑,这个版本是不能用的,我稍后会说明,现在先暂时用这个版本。
    安装后继续执行makepkg,仍然出错了
    在这里插入图片描述
    pgp检验很麻烦,可以选择跳过,使用如下命令选项:
    makepkg --skippgpcheck
    在这里插入图片描述
    还是出错,这是因为gdb源码是在linux编译的,想要在windows下编译需要先打补丁,打补丁使用patch命令,这里没安装,需要先安装patch

    pacman -S patch
    

    在这里插入图片描述
    安装后重新运行makepkg --skippgpcheck
    在这里插入图片描述
    提升缺少texinfo包,接着安装texinfo
    pacman -S texinfo
    在这里插入图片描述
    安装时好像出了点意外,既然不能在线安装,那么可以试试本地安装
    pacman -U /c/Users/Administrator/Downloads/texinfo-6.6-1-i686.pkg.tar.xz
    在这里插入图片描述
    如果出错了,可以输入mv /var/lib/pacman/db.lck /tmp命令把db.lck文件移除后重新安装,就可以安装成功了。
    重新运行makepkg --skippgpcheck
    在这里插入图片描述
    又出错了,提示没找到python,可是我明明安装了python3.7啊,也可以正常运行
    在这里插入图片描述
    到这里我不知道该怎么办了,为此我选择去看makepkg和configure的源码,关键代码如下

    if ac_fn_c_try_link "$LINENO"; then :
      have_libpython=${version}
                      found_usable_python=yes
                      PYTHON_CPPFLAGS=$new_CPPFLAGS
                      PYTHON_LIBS=$new_LIBS
    fi
    ... ...
    
        fi
      fi
      if test "${have_libpython}" = python2.7 -o "${have_libpython}" = python27; then
    
    ... ...
    
      fi
    
      if test "${have_libpython}" = no; then
        case "${with_python}" in
        yes)
          as_fn_error $? "python is missing or unusable" "$LINENO" 5
          ;;
        auto)
          { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: python is missing or unusable; some features may be unavailable." >&5
    $as_echo "$as_me: WARNING: python is missing or unusable; some features may be unavailable." >&2;}
          ;;
        *)
          as_fn_error $? "no usable python found at ${with_python}" "$LINENO" 5
          ;;
        esac
      else
        if test -n "${python_prefix}"; then
    
    cat >>confdefs.h <<_ACEOF
    #define WITH_PYTHON_PATH "${python_prefix}"
    _ACEOF
    

    if ac_fn_c_try_link “$LINENO”; 这个条件没进去,导致have_libpython还是初始化的值no,跟到ac_fn_c_try_link函数里看了一下,最后由于代码写的实在太复杂了,没看懂,通过看脚本代码来解决问题这条路走不通。

    看看有没有其他方法,说不定是python3.7太新了,当前的msys2环境识别不出来呢,可以换一个旧点的版本试试。
    通过pacman -R python命令卸载当前的python,安装一个旧一点的版本python-3.4.3-2-i686.pkg.tar.xz
    在这里插入图片描述
    再次运行makepkg --skippgpcheck
    在这里插入图片描述
    … …
    在这里插入图片描述
    最后执行到check的时候出错,这说明build已经成功,编译完成,check出错了也没关系,我们不关心这个,因为用不到。
    到E:\source\gdb-8.2.1-2.src\gdb\src\gdb-8.2.1\gdb去看一下
    在这里插入图片描述
    最后终于生成了所需要的gdb.exe可执行文件,大功告成!

    展开全文
  • ./configuremakemake install1234的顺序安装了gdb7.2,那么接下来按 $./configure –target=arm-linux –program-prefix=arm-linux- –prefix=/opt/gdb/在接下来make的过程中会出现如下错误:Configuring in ./...

    1 我先按 。./configure

    make

    make install1

    2

    3

    4

    的顺序安装了gdb7.2,那么接下来按 $./configure –target=arm-linux –program-prefix=arm-linux- –prefix=/opt/gdb/

    在接下来make的过程中会出现如下错误:

    Configuring in ./intl

    configure: loading cache ./config.cache

    configure: error: target_alias' has changed since the previous run:

    configure: former value:i686-pc-linux-gnu’

    configure: current value: arm-linux'

    configure: error: in/home/w/下载/gdb-7.2/intl’:

    configure: error: changes in the environment can compromise the build

    configure: error: run make distclean' and/orrm ./config.cache’ and start over

    make[1]: * [configure-intl] 错误 1

    make[1]:正在离开目录 `/home/w/下载/gdb-7.2’

    make: * [all] 错误 2

    解决的方法:删掉gcc,重新建立gcc后再执行 ./configure …..,或者执行:make disclean和rm ./config.cache命令,我看着麻烦,还是 rm -fr gcc最简单。

    这里要提的就是,如果配置发生了更新,如果没有清空上一次的结果,可能会遇上这个问题。

    2 换到另一个虚拟机上,这次不再直接安装 按照转载的文章的步骤可以顺利完成gdb的编译安装。但是在编译gdbserver的时候出现了问题,虽然 ./configure –target=arm-linux –host=arm-linux 指定了目标平台和 主机都是arm-linux但是编译出来结果

    gdbserver: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped

    还是intel 80386的。

    即使是指定CC为交叉编译器还是不行。

    export CC=arm-none-linux-gnueabi-gcc

    通过分析输出的信息

    checking for arm-linux-gcc… no

    checking for C compiler default output file name… a.out

    checking whether the C compiler works… yes

    checking whether we are cross compiling… no

    由于我安装的交叉编译器是codesource的交叉编译工具链,似乎是我的交叉编译名字不符合它的要求,一定要叫 arm-linux-gcc ?于是创建一系列软链接

    n -s arm-none-linux-gnueabi-gdbtui arm-linux-gdbtui

    ln -s arm-none-linux-gnueabi-addr2line arm-linux-addr2line

    ln -s arm-none-linux-gnueabi-gprof arm-linux-gprof

    ln -s arm-none-linux-gnueabi-ar arm-linux-ar

    ln -s arm-none-linux-gnueabi-as arm-linux-as

    ln -s arm-none-linux-gnueabi-nm arm-linux-nm

    ln -s arm-none-linux-gnueabi-ld arm-linux-ld

    ln -s arm-none-linux-gnueabi-c++ arm-linux-c++

    ln -s arm-none-linux-gnueabi-objcopy arm-linux-objcopy

    ln -s arm-none-linux-gnueabi-c++filt arm-linux-c++filt

    ln -s arm-none-linux-gnueabi-cpp arm-linux-cpp

    ln -s arm-none-linux-gnueabi-ranlib arm-linux-ranlib

    ln -s arm-none-linux-gnueabi-objdump arm-linux-objdump

    ln -s arm-none-linux-gnueabi-readelf arm-linux-readelf

    ln -s arm-none-linux-gnueabi-size arm-linux-size

    ln -s arm-none-linux-gnueabi-gcov arm-linux-gcov

    ln -s arm-none-linux-gnueabi-strings arm-linux-strings

    ln -s arm-none-linux-gnueabi-gdb arm-linux-gdb

    ln -s arm-none-linux-gnueabi-strip arm-linux-strip

    ln -s arm-none-linux-gnueabi-sprite arm-linux-sprite

    ln -s arm-none-linux-gnueabi-gcc-4.3.3 arm-linux-gcc-4.3.3

    ln -s arm-none-linux-gnueabi-gcc arm-linux-gcc

    重新执行命令 CC=arm-linux-gcc ./configure –target=arm-linux –host=arm-linux

    发现 找到了交叉编译器,变成yes了

    checking for arm-linux-gcc… arm-linux-gcc

    checking for C compiler default output file name… a.out

    checking whether the C compiler works… yes

    checking whether we are cross compiling… yes

    以为大功告成了,结果又出现问题

    /opt/tools/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: xml-builtin.o: Relocations in generic ELF (EM: 3)

    /opt/tools/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: xml-builtin.o: Relocations in generic ELF (EM: 3)

    /opt/tools/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: xml-builtin.o: Relocations in generic ELF (EM: 3)

    xml-builtin.o: could not read symbols: File in wrong format

    collect2: ld returned 1 exit status

    make: * [gdbserver] Error 1

    有点郁闷,错误提示文件格式不对。执行命令 file xml-builtin.o

    xml-builtin.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped

    不对呀,已经指定了是交叉编译了怎么生成的目标文件还是 intel 80386呢?

    原来是之前执行过没有设置好交叉编译的时候,执行过了make命令,所以生成了这样的目标文件。于是 执行 make clean 清除掉这些之前生成的文件

    重新 执行CC=arm-linux-gcc ./configure –target=arm-linux –host=arm-linux make

    再来查看生成的gdbserver

    执行命令 file gdbserver

    gdbserver: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.14, not stripped

    终于 看到ARM!

    单枪匹马摸索嵌入式的这些东西还真是让人头疼,各种问题让人摸不着头脑。好在经过长时间的尝试和摸索找到了解决的方法。

    展开全文
  • 1. 从http://ftp.gnu.org/gnu/gdb/ 下载最新...2. 在gdb-8.3目录下,创建一个build.sh脚本文件,内容如下: ./configure \ --prefix="$PWD/install" \ --target=aarch64-himix100-linux \ --host=aarch64-him...

    1. 从http://ftp.gnu.org/gnu/gdb/ 下载最新稳定版8.3,即gdb-8.3.tar.gz,解压缩;

    2. 在gdb-8.3目录下,创建一个build.sh脚本文件,内容如下:

    ./configure \
    	--prefix="$PWD/install" \
    	--target=aarch64-himix100-linux \
    	--host=aarch64-himix100-linux \
    	--program-prefix=hisi-

    3. 依次执行如下命令,注:make install时会显示一些install error可以忽略:

    ./build.sh
    make -j8
    make install

    4. 执行完后会在当前install目录下生成bin, include, lib, share四个目录,每个目录的内容如下图所示:

    5. 将install/bin/目录下的hisi-gdb拷贝到海思板子上,然后执行:$ ./hisi-gdb 结果如下:

    6. 测试代码main.cpp如下:

    #include <stdio.h>
    #include <iostream>
    
    namespace {
    
    void func() {
    	const char* p = "hello";
    	delete p;
    }
    
    } // namespace
    
    int main()
    {
    	fprintf(stdout, "test start\n");
    	func();
    	fprintf(stdout, "test finish\n");
    }

    7. 执行如下命令,生成可执行文件main:

    /opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-g++ -g -o main main.cpp

    8. 将可执行文件main拷贝到海思板子上,执行:$ ./main ,结果如下图所示:

    9. 通过$ ulimit -c unlimited命令开启产生core文件,如上图所示;

    10. 通过gdb core dump方法查看程序异常时的堆栈信息,执行:$ ./hisi-gdb main core,结果如下图所示:

     

    展开全文
  • root@u12d32:/home/kongjun/work/gdb_qy_test/gdb-6.4 # root@u12d32:/home/kongjun/work/gdb_qy_test/gdb-6.4 # find -name arm-dis.c ./opcodes/arm-dis.c root@u12d32:/home/kongjun/work/gdb_qy_...

    查看具体是那个C文件,然后到该C文件所在目录下找Makefile,找到“-Werror”字段,把“-Werror”字段进行删除即可!

     

    例子:

    arm-dis.c:2155:9: error: format not a string literal and no format arguments [-Werror=format-security]
    arm-dis.c:2162:9: error: format not a string literal and no format arguments [-Werror=format-security]

    解决方案:

    root@u12d32:/home/kongjun/work/gdb_qy_test/gdb-6.4#
    root@u12d32:/home/kongjun/work/gdb_qy_test/gdb-6.4# find -name arm-dis.c
    ./opcodes/arm-dis.c
    root@u12d32:/home/kongjun/work/gdb_qy_test/gdb-6.4#

     

    把“-Werror”直接删除,其他不变即可!

     

    展开全文
  • 编译gdb源码

    2019-09-17 23:35:16
    下面以gdb-7.10.1.tar.gz为例,演示如何编译gdb源码 源码链接:https://pan.baidu.com/s/1ukQmQycOyx-chlYMTWRQCw 提取码:jwjf ./configure --host=arm-none-linux-gnueabi【编译链】 --prefix=/opt/arm-linux-...
  • 下载gdb-8.3.tar.gz http://www.sourceware.org/gdb/ 下载 ncurses-5.9.tar.gz http://www.gnu.org/software/ncurses/ 2、安装包编译 2.1 编译ncurses: CC=arm-himix200-linux-gcc ./configure --host=arm-himix200-...
  • binutils源码下载:https://github.com/bminor/binutils-gdb 可以交叉编译gprof,以便在多种嵌入式设备上进行C代码的性能分析; 2. 编译方法 CC=aarch64-himix100-linux-gcc ./configure -host=aarch64-himix100-...
  • 交叉编译GDB

    2020-06-16 09:49:11
    阅读目录一、下载源码包编译gdb源码编译gdbserverGDB+GDBServer的使用使用GDB调试core文件 本章下载和使用的gdb版本是gdb-7.12.tar.gz 一、下载源码包 gdb官网下载,这里下载的是gdb-7.8.2.tar.xz,放在~/Downloads...
  • 交叉编译gdb for mips

    2020-09-28 21:13:38
    文章目录1 下载并解压gdb源码2 编译gdb2.1 编译termcap参考 1 下载并解压gdb源码 mkdir -p /data/plat/gdb && cd /data/plat/gdb wget http://ftp.gnu.org/gnu/gdb/gdb-7.3.1.tar.gz tar xf gdb-7.3.1.tar....
  • 交叉编译gdb调试

    千次阅读 2019-03-30 17:07:24
    在开发过程中总会遇到段错误之类的问题,交叉编译gdb方便在开发板上调试,这里记录一下编译流程。 1. 交叉编译gdb 下载合适版本的gdb源码包,我这里使用的是gdb-7.8.tar.gz,点击下载地址。 交叉编译gdb过程中发现这...
  • gdb源码下载:http://ftp.gnu.org/gnu/gdb/ tar xzvf gdb-8.0.1.tar.gz cd gdb-8.0.1/ ./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc make # 编译生成可执行文件:gdb/gdb 和 gdb/gdbserver/...
  • windows下编译gdb源码 首先随便写了个测试程序 int c = 51115; int b[10] = {0}; int *p = malloc(40); sprintf(b,"%p",p); c +=b[0]&0xff; //随便赋一个非常量值,如果是常量的话编译时就直接算好写到PE...
  • 当下载完成后,会发现在源码中同时包含了 gdb 的目录和 binutils 各个工具的源码目录。为了实现 gdb 或 binutils 的独立编译,需要指定编译的工具。 编译 GDB 编译 GDB 的参数如下: ../binutils-gdb/configure --...
  • 编译gdb 报错 No module named gdb.frames 将源码目录下的python模块拷贝到指定目录即可 cd /root/gdb-7.12/ cp -rpgdb/python/lib/gdb/usr/local/share/gdb/python/ 编译安装gdb 发现问题 p...
  • 使用GDB源码进行交叉编译

    千次阅读 2008-12-13 10:19:00
    首先,先来段闲话。算是本篇的背景 最近发现我们部门目前在ATI平台上用的 GDB 版本太旧了。...我也不知道是不是版本太低的缘故,反正就抽空下载了最新版本“GDB 6.8” 在我的虚拟机上进行交叉编译。 1、从htt
  • 源码编译安装gdb

    2017-06-07 16:36:48
    1 、安装ncurses ...  configure, make, ...4、安装gdb  下载路径:http://ftp.gnu.org/gnu/gdb/gdb-7.9.1.tar.gz  confiure, make, make install  最终安装路径在/usr/local/bin  .
  • 下载源码git clone https://github.com/mysql/mysql-server.gitcd mysql-servergit checkout 5.7编译安装安装依赖yum install -y cmake make gcc gcc-c++ ncurses-devel bison gdb需要注意的一点,需要指定 boost ...
  • 编译GDB(主要针对LINUX平台)

    千次阅读 2014-02-03 14:25:22
    1. 在浏览器输入ftp://202.193.9.3,进入里面的incoming/embeded_system_upload/experiment文件夹,下载在arm上可以单步调试的gdb源码包gdb-6.6.tar.gz 2. 准备安装的目录 #mkdir /opt/gdb/arm-gdb #mkdir /opt/...
  • vim/gvim/vimgdb 编译安装 ...vim有两种安装方式,一种是直接从软件源安装,一种是编译源码安装,因为需要对gdb的支持来方便调试,所以这里采用源码编译的方式。 下载 vim-7.3.tar.bz2 http://ishar
  • 在msys环境下编译GDB的过程记录

    千次阅读 2011-04-11 00:14:00
    1 进来因为项目需要研究GDB,所以我从网上下载了GDB的源码用于学习,下面把我在msys环境下编译gdb的过程记录下   1 首先安装mingw 和 msys  具体如何安装这两个软件,请参考  ...
  • 这星期在是用ejtag的时候缺少了gdb工具,因此自己需要手动编译一个gdb工具,编译过程中遇到了一些错误,翻阅了大量的网上资料解决了这些问题,从而也学习了一下交叉编译源码包的方法,这里做一个总结。  首先去...
  • gdb编译及使用

    千次阅读 2012-01-11 09:24:39
    参考: ... 1、背景 ...且最好重新编译gdb源码,生成针对ARM的arm-linux-gdb 在目标机上运行gdbserver,需要用arm-linux-gcc编译gdbserver源码来生成 2、安装arm-linux-gcc 下载arm-linux-
  • gdb 编译

    2020-09-29 14:21:32
    下载gdb源码: mkdir build cd build ../configure --prefix=/data/data/rockchip20200616/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/arm-linux-gnueabihf --host=arm-linux-...
  • 今天小编就为大家分享一篇关于GDB调试Mysql实战之源码编译安装,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 修改openjdk8的源码,然后编译和调试,达到预期的效果

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 859
精华内容 343
关键字:

编译gdb源码