Articles of gdb

“(gdb)在qemu仿真arm架构上运行可执行文件时运行”崩溃

这是我的第一个信息,我写信给你,因为这次我不能真的把我从这个问题中解救出来。 我正在经历一个关于gdb的课程。 在后面的课程中,这个课程涵盖了ARM架构的debugging,所以我给出了一个让我模拟这种情况的设置。 我目前的设置是由: Windows 10:物理主机 Ubuntu 12.04.5 LTS:通过Windows 10上的Oracle Virtual Box访客操作系统 Linux debian-armel 2.6.32-5-versatile:在Ubuntu上通过qemu 2.8.0访客操作系统 ARM Debian镜像来自https://people.debian.org/~aurel32/qemu/armel/ 该图像与启动 qemu-system-arm -M versatilepb -kernel vmlinuz-2.6.32-5-versatile -initrd initrd.img-2.6.32-5-versatile -hda debian_squeeze_armel_standard.qcow2 -append "root=/dev/sda1" -m 256 -redir tcp:2222::22 我修改了sources.list和apt.conf以允许apt工作,因为de distro相当不合时宜。 我更新和升级并安装了gcc和gdb。 尝试debugging时出现问题:我可以在gdb中加载可执行文件 root@debian-armel:~/video-11/video-11# file ./main ./main: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), […]

gdb步骤不按预期工作

我在Linux上debugging静态multithreadingx86-64 C ++应用程序。 我可以在函数上设置断点并停止它们,我可以一步一步遍历函数体。 但是,当我尝试进入另一个函数,gdb不停止在它的开始,似乎它只是继续执行。 当我中断程序执行时,gdb进入中断状态并变得不可用: (gdb) bt Target is executing. (gdb) c Continuing. Cannot execute this command while the selected thread is running. (gdb) 作为一种解决方法,我可以使用stepi几次而不是step , stepi按预期工作。 这可能是什么原因呢? 除了使用stepi还有什么解决办法吗? 我使用gdb 7.6和gcc 4.7.1。

与GDB远程debugging错误

我试图远程debuggingx86_64 suse linux上的32位应用程序,但得到这个“远程寄存器格式错误”的错误。 我启动gdbserver侦听端口12345(gdbserver localhost:12345 my_prog) 这是错误的: $ gdb 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 […]

GDB没有这样的文件或目录

我正在关注OpenSecurityTraining的这些经验教训。 我已经到了实验室,在那里我要用CMU炸弹训练自己。 他们提供了一个x86_64编译的CMU炸弹,你可以在这里find: CMU炸弹x86-64最初来自CMU实验室计算机系统:程序员的视angular(CS:APP)第一版 32位炸弹。 我有一个虚拟化的64位基本操作系统发行版,我可以毫不费力的使用GDB反汇编CMU Bomb。 现在,我有一个64位的Ubuntu 14.04 LTS(未虚拟化),当我试图重现为什么我做了我的基本操作系统,我得到了着名的错误。 我运行这些命令: gdb ./bomb-x64 (gdb) b main Breakpoint 1 at 0x400dbd: file bomb.c, line 37. — why bomb.c ? (gdb) r … bomb.c: no such file or directory 编辑:我可以在CMU炸弹的其他function上创build断点,并按预期工作。 例如: (gdb) b phase_1 Breakpoint 3 at 0x400f00 (gdb) r Breakpoint 1, 0x0000000000400f00 in phase_1 () (gdb) […]

如何在使用GDB生成核心转储文件时限制核心转储文件的大小

我正在ARM9主板上运行一个embedded式应用程序,总闪存容量仅为180MB。 我能够运行gdb ,但是当我这样做 (gdb) generate-core-dump 我得到一个错误 warning: Memory read failed for corefile section, 1048576 bytes at 0x4156c000. warning: Memory read failed for corefile section, 1048576 bytes at 0x50c00000. Saved corefile core.5546 The program is running. Quit anyway (and detach it)? (y or n) [answered Y; input not from terminal] Tamper Detected **********OUTSIDE ifelse 0********* length […]

gdb如何获取线程名称显示

在我的应用程序中创build了很multithreading。 一些线程名在gdb中可见,而我执行命令'info threads',其他的则不显示。 如何获取所有的线程名称本身,而不是hex值,如0xb7fe1424 4 Thread 0xb68ffb70 (LWP 18377) 0xb7fe1424 in __kernel_vsyscall () * 3 Thread 0xb7291b70 (LWP 18375) JKMainT (arg=0x0) at mylib.cpp:482 2 Thread 0xb7a92b70 (LWP 18374) 0xb7fe1424 in __kernel_vsyscall () 1 Thread 0xb7a94730 (LWP 18371) 0xb7fe1424 in __kernel_vsyscall ()

为什么我不能在gdb中打印出环境variables?

#include <unistd.h> #include <stdio.h> extern char **environ; int main(int argc, char *argv[]) { int i = 0; while(environ[i]) { printf("%s\n", environ[i++]); } return 0; } 这是我的操作: (gdb) n 8 printf("%s\n", environ[i++]); (gdb) p environ[i] Cannot access memory at address 0x0 (gdb) n LOGNAME=root 7 while(environ[i]) { 正如你所看到的, printf可以打印出environ[i] ,但是p environ[i]给我Cannot access memory at address 0x0 […]

如何访问.gdbinit和gdb内部的环境variables?

我在用gdb进行debugging时,正在设置源代码的path。 我select用.gdbinit文件来做到这一点。 基本上它包含一个命令: directory="/path/to/src". 不过,我希望能够指定该命令为: directory="$SOURCESROOT/src" SOURCESROOT是一个环境variables。 而且,如果可能的话,也可以在gdb的debuuging会话中通过inputdirectory=$SOURCESROOT/folder来做到这一点。 基本上,我正在寻找访问内部gdb(或内部.gdbinit)的环境variables。 但不是恶魔的环境(设置env等),而是gdb本身的环境(即我在第一个input“gdb程序”的bash提示符处)。 在gdb会话中inputshell $SOURCESROOT显示环境variables的内容时,这是无用的,因为我不能input: directory=shell $SOURCESROOT 。 PS:任何人都会发现Linux(Debian)的理想设置是使用“apt-get source”来下载源代码,并使用某种“apt-get update”utopic命令更新这些源代码并安装它们,以便gdb自动查找来源?

使成功终止gdb自动退出?

我使用一个debugging脚本连续运行几个相关的进程与debugging器。 我目前使用-x自动执行几个命令(如run )。 如何在debugging过程成功终止时自动退出gdb? 向命令文件添加一个quit命令将导致该命令不仅在成功终止时被处理,而且还会在发生错误时(当时我宁愿接pipe)。 以下是正在发生的事情摘录: + gdb -return-child-result -x gdbbatch –args ./mkfs.cpfs / dev / loop0 GNU gdb(GDB)7.1-ubuntu 读取/home/matt/cpfs/mkfs.cpfs…done中的符号。 程序正常退出。 断点2在0x805224f:文件log.c,第32行。 (GDB) gdbbatch内容: 开始 b cpfs_log如果级别> =警告

gdb – 列出当前函数的来源而不input其名称

在GDB中,命令: list function 将列出该function的所有来源。 是否有一个命令会列出当前所有函数的源代码,而不需要手动input函数名称?