2020-02-27 18:59
⁄ 工业·编程
⁄ 共 2443字
众所周知,C++的STL容器的实现并不直观,直接使用gdb之类的debugger查看内存是需要周转多次才能看到具体的内容的。
在Visual Studio之类的IDE中内置了一些脚本,用来较为友好的显示容器内的元素。GDB的pretty-printer脚本提供了类似的功能。
举个例子:
假设我们有如下c++代码
std::vector<int> vec{1,2,3,4};
std::string s="this is my string.";
在关闭和开启pretty-printer的情况下,我们使用GDB查看vec和s...
GDB, vscode阅读全文
2019-08-31 12:55
⁄ 工业·编程
⁄ 共 13965字
GDB, 即GNU调试器(GNU Debugger)。它诞生自开源软件基金会(Free Software Foundation)成立之初的第一批程序,并一直是免费和开源软件系统中的主要成员。最初GDB只是Unix系统上一个简单的源码层次的调试器,代码量不过数千行C代码,后来逐步发展壮大,拓展到包括嵌入式系统在内多个平台,代码量也达到了上百万行。
GDB在发展,不断地满足着新的用户需求并增加新的功能。这一章将我们将介绍GDB的整体内部结构,探讨一下GDB是如何...
GDB, 源码阅读全文
2018-10-28 13:42
⁄ 工业·编程
⁄ 共 516字
gdb有一组命令可辅助多线程程序的调试。
info threads
显示当前可调试的所有线程。gdb会为每个线程分配一个ID,我们可以使用这个ID来操作对应的线程。ID前面有“*”的线程是当前被调试的线程。
thread ID
调试目标ID指定的线程。
set scheduler-locking[off|on|step]
调试多线程程序时,默认除了被调试的线程在执行外,其他线程也在继续执行,但有的时候我们希望只让被调试的线程运行。这可以通过这个命令来实现。
该命令设置...
GDB阅读全文
2018-10-27 13:38
⁄ 工业·编程
⁄ 共 469字
如果一个进程通过fork系统调用创建了子进程,gdb会继续调试原来的进程,子进程则正常运行。那么该如何调试子进程呢?
单独调试子进程
子进程从本质上说也是一个进程,因此我们可以用通用的gdb调试方法来调试他。
举例来说如果要调试一个服务器中的某一个子进程,我们可以先运行服务器,然后找到目标子进程的PID,再将其附加(attach)到gdb调试器上,具体操作为:
$ps -ef | grep 进程名
//通过上述命令的到...
GDB阅读全文
2018-09-15 08:21
⁄ 工业·编程
⁄ 共 1243字
gdb是C/C++程序员必备的专业技能,工作中gdb最常用的场景有两个,一个是分析core文件,另一个是调试程序。
分析core文件的方法如下:
1、gdb 程序名 core文件名
2、bt或where命令查看堆栈信息。
3、进入某个栈:f N,f是frame的缩写,N是栈号,如0、1、2、3...
进入到某个栈后,才能通过p命令查看这个栈的临时变量,否则只能查看全局变量。
例如a.out程序core产生了core文件core-a.out-12345,gdb方法如下:
gdb a.out core-a.o...
GDB阅读全文
2018-02-16 19:10
⁄ 工业·编程
⁄ 共 833字
1.ubuntun14.04下安装cgdb
cong@msi:~$ sudo apt-get install cgdb
2. 使用: cgdb ./hello就可以了
a. cgdb分为上面的vi窗口与下面的gdb窗口
ESC-->切到vi窗口
i -->切到gdb窗口
- -->减小vi窗口
= -->增大vi窗口
shift - -->减小很多vi窗口
shift = -->增大很多vi窗口
b.断点
空格添加/删除断点
c. gdbinit脚本不能用
warning: File "/work/ffmpeg/jpeg/jpegc/.gdbinit" auto-loading has...
cgdb, GDB阅读全文
2018-01-16 19:08
⁄ 工业·编程
⁄ 共 43字
方法一:gdb -tui a.out
方法二:进入gdb后,Ctl+x,Ctl+a进入tui
GDB阅读全文
2017-03-14 22:21
⁄ 工业·编程
⁄ 共 12381字
当 GDB(即 GNU Project Debugger)启动时,它在当前用户的主目录中寻找一个名为 .gdbinit 的文件;如果该文件存在,则 GDB 就执行该文件中的所有命令。通常,该文件用于简单的配置命令,如设置所需的缺省汇编程序格式(Intel® 或 Motorola)或用于显示输入和输出数据的缺省基数(十进制或十六进制)。它还可以读取宏编码语言,从而允许实现更强大的自定义。该语言遵循如下基本格式:
define <command>...
GDB, gdbinit阅读全文
2016-07-22 23:11
⁄ 工业·编程
⁄ 共 16549字
1. GDB与GCC等其他GNU工具以前,构成了程序开发调试不可缺少的一环.
2. GDBSERVER源码架构如下:
a) Gdbserver代码简单,本身支持serial或tcp连接
b) 源码位于 gdb/gdbserver下
c) Server.c...
GDB, 软件调试阅读全文
2016-07-21 23:08
⁄ 工业·编程
⁄ 共 882字
在调试程序的过程中,查看程序的函数调用堆栈是一项最基本的任务,几乎所有的图形调试器都支持这项特性。
GDB调试器当然也支持这一特性,但是功能更加灵活和丰富。
GDB将当前函数的栈帧编号为0,为外层函数的栈帧依次加1,这些编号将成为一些GDB命令的参数,以指明将要操作的是哪一个函数的栈帧。
GDB还支持使用Address...
GDB, 软件调试阅读全文