gdb 远程qemu-arm调试

把 c 编译成 arm 指令的可运行文件

/usr/bin/arm-linux-gnueabi-g++ hello.cpp

cat hello.cpp
#include <stdio.h>

void crash(){

    char *a=0;
    *a=0;
}
int main()
 {
        printf("hello world\n");
        crash();
        printf("after crash\n");
 }

直接执行报错。由于 host 是 linux x86

$ ./a.out

-bash: ./a.out: cannot execute binary file

须要用 qemu-arm 来执行, 结果是期望的

qemu-arm -L  /usr/arm-linux-gnueabi/  a.out

hello world

qemu: uncaught target signal 11 (Segmentation fault) - core dumped

Segmentation fault (core dumped)

进行远程调试(关键是添加 -g 參数,指定port为1235)

qemu-arm -g 1235 -L  /usr/arm-linux-gnueabi/  a.out

运行用 linux-x86 的 gdb 并不能打印 symbol

(gdb) target remote :1235
Remote debugging using :1235
(gdb) c
Continuing.

Program received signal SIGSEGV, Segmentation fault.
0x00000000 in ?? ()
(gdb) bt
#0  0x00000000 in ?? ()
Cannot access memory at address 0x0
(gdb) file /home/payne/hello/a.out
A program is being debugged already.
Are you sure you want to change the file? (y or n) y
Reading symbols from /home/payne/hello/a.out...(no debugging symbols found)...done.
(gdb) bt
#0  0x00000000 in ?? ()
Cannot access memory at address 0x0
(gdb) 

怀疑要使用 arm 的 gdb

參见 http://mazhijing.blog.51cto.com/215535/40759。 编译了 arm 的gdb, 运行后定位到 crash()

qemu-arm -L  /usr/arm-linux-gnueabi/  ./gdb
(gdb) target remote :1235
Remote debugging using :1235
warning: Can not parse XML target description; XML support was disabled at compile time
0x40801c40 in ?? ()
(gdb) file /home/payne/hello/a.out
A program is being debugged already.
Are you sure you want to change the file?

(y or n) y
Reading symbols from /home/payne/hello/a.out...(no debugging symbols found)...done.
(gdb) c
Continuing.

Program received signal SIGSEGV, Segmentation fault.
0x0000841e in crash() ()
(gdb)   

结论:

难道说 arm 的 gdbserver, 就仅仅能用 arm 的 gdb?

时间: 2024-12-21 21:33:33

gdb 远程qemu-arm调试的相关文章

20150502 调试分析之 使用gdb远程调试ARM开发板

20150502 调试分析之 使用gdb远程调试ARM开发板 2015-05-02 Lover雪儿 今天我们要学习的是使用gdb和gdbserver来远程调试开发板程序. 下面是本人的一些具体步骤: 下载gdb-7.9.tar.gz地址: http://ftp.gnu.org/gnu/gdb/gdb-7.9.tar.gz 安装gdb tar -jxvf gdb-7.9.tar.bz2 ./configure -target=arm-none-linux-gnueabi --prefix=/hom

gdb 远程调试android进程 -转

什么是gdb 它是gnu组织开发的一个强大的unix程序调试工具,我们可以用它来调试Android上的C.C++代码. 它主要可以做4件事情: 随心所欲地启动你的程序. 设置断点,程序执行到断点处会停住.(断点可以是表达式) 程序被停住后,可以查看此时程序中发生的事. 动态改变程序的执行环境. GDB远程调试原理图 如图上所示,我们需要使用gdbserver依附到我们要调试的进程上,gdb通过adbd和手机上的gdbserver 进行socket通信. 远程调试实战 在手机上启动gdbserve

GDB远程调试(一)之DM8168下gdb远程调试环境的搭建

1.前言 gdb是较为流行和通用的linux环境调试工具,掌握它对于嵌入式开发工作来说非常必要,能够提高工作效率,快速发现和解决问题.最近有兴趣研究了下gdb使用,特总结如下以备以后查阅. 2.下载最新的gdb 下载地址:http://ftp.gnu.org/gnu/gdb/,选择目前最新的版本下载.我选择了gdb-7.7.tar.gz版本 3.编译gdb和gdbserver (1)解压到你的工作目录: [email protected]:~$ tar -xvf gdb-7.7.tar.gz (

gdb 远程调试android进程

原文:http://blog.csdn.net/xinfuqizao/article/details/7955346?utm_source=tuicool 什么是gdb 它是gnu组织开发的一个强大的unix程序调试工具,我们可以用它来调试Android上的C.C++代码. 它主要可以做4件事情: 随心所欲地启动你的程序. 设置断点,程序执行到断点处会停住.(断点可以是表达式) 程序被停住后,可以查看此时程序中发生的事. 动态改变程序的执行环境. GDB远程调试原理图 如图上所示,我们需要使用g

学习4412开发板gdb和gdbserver的调试

因为有很多的小伙伴是从单片机转过来的,用惯了单片机上的JLINK调试程序,换到Linux上非常的不习惯.确实,如果能设置断点,单步调试,查看变量,那确实是太爽了,那么在我们的Linux可以做到吗,答案当然是可以的. 在之前的文章中,对gdb调试做过一期简单的介绍番外篇|使用gdb对程序进行调试,但是之前的文章我们是在ubuntu上对应用程序进行的调试,不是在ARM板上进行的调试,相对于其他的软件开发,嵌入式软件的调试手段比较有限,我相信一定有很多人的调试手段依然是使用最原始的打印的办法.这一期我

安装ARM调试器

一.概述 1.调试ARM应用程序的软硬件组成 硬件JTAG/SWD仿真器 Eclipse调试插件 GDB调试客户端 GDB服务器端 JTAG/SWD需要的硬件驱动 2.GNU ARM Eclipse推荐的两种调试方案 SEGGER J-Link仿真器 & GDB server是一种非常高效的解决方案,支持 JTAG and SWD(加上SWO的跟踪输出) OpenOCD应用程序是一种通用的工具,支持便宜的JATG仿真器,但是它只能支持JTAG而不支持SWD,而且速度比较慢. 配置经常是模糊的,在

Tokyo Tyrant(TTServer)系列(四)-tcrmgr远程管理与调试

Tokyo Tyrant(TTServer)系列-tcrmgr(远程管理与调试) tcrmgr是TokyoTyrant的管理工具,对ttserver进行管理与执行命令: 通过输入tcrmgr回车,可以看到相关操作选项:tcrmgr inform [-port num] [-st] host 查看当前服务运行状态信息 tcrmgr put [-port num] [-sx] [-sep chr] [-dk|-dc|-dai|-dad] host key value 保存一条记录 tcrmgr ou

远程代码的调试--移动端代码调试(火狐工具)

Remotely debugging Firefox for Android 使用火狐开发工具可以在桌面上进行远程代码的调试(FF26以上) 具体使用参考: https://developer.mozilla.org/en-US/docs/Tools/Remote_Debugging/Firefox_for_Android 主要流程: 1.在桌面上安装AndroidSDK,并使用AndroidSDK安装Android Platform Tools,测试安装成功的方法: 通过USB连接电脑与设备

使用PyCharm进行远程开发和调试

http://blog.csdn.net/ll641058431/article/details/53049453 你是否经常要在Windows 7或MAC OS X上面开发Python或Web应用程序,但是它们最后需要在linux上面来运行呢? 我们经常会碰到开发时没有问题但是到了正式的Linux环境下面却出现问题.那么怎样保证开发环境跟运行环境的一致呢? 通常有两种方法解决.一种是使用PyCharm内置支持的Vagrant,这个教程可以参考Vagrant开发环境配置. 不过很遗憾的是我自己在

一分钟搞定pychram和服务器端远程同步和调试代码

首先说一下需求,否则很多人都不知道pycharm这个远程同步和调试到底是干嘛使的. 需求很简单,我想要在本地的windows机器上跑一个程序,但是程序运行会加载一些很占内存的树型数据结构,称其为tree:这些tree的大小有20G,需要全部加载到内存当中才能够使的程序跑起来,这下完了,我的计算机配置内存才8G,如果tree都加载到内存中肯定会爆掉.因为公司服务器的内存为90G,所以完全可以用其来加载tree.但是其中一个问题是我可以将代码传送到公司服务器上,然后在其上面跑,但是一旦我需要修改代码