This GDB was configured as "i686-linux-gnu". 32位的gdb 系统是64的
sudo apt-get install gdb
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会安装下列额外的软件包:
libc6-dbg
建议安装的软件包:
gdb-doc gdbserver
推荐安装的软件包:
libc-dbg
下列软件包将被【卸载】:
gdb:i386
下列【新】软件包将被安装:
gdb libc6-dbg
升级了 0 个软件包,新安装了 2 个软件包,要卸载 1 个软件包,有 0 个软件包未被升级。
需要下载 6,049 kB 的软件包。
解压缩后会消耗掉 24.4 MB 的额外空间。
您希望继续执行吗?[Y/n]y
获取:1 http://cn.archive.ubuntu.com/ubuntu/ saucy/main gdb amd64 7.6.1-0ubuntu3 [2,539 kB]
获取:2 http://cn.archive.ubuntu.com/ubuntu/ saucy/main libc6-dbg amd64 2.17-93ubuntu4 [3,511 kB]
下载 6,049 kB,耗时 1分 47秒 (56.1 kB/s)
(正在读取数据库 ... 系统当前共安装有 182181 个文件和目录。)
This GDB was configured as "i686-linux-gnu". 32位的gdb 系统是64的sudo apt-get install gdb正在读取软件包列表... 完成正在分析软件包的依赖关系树 正在读取状态信息... 完成 将会安装下列额外的软件包: libc6-dbg建议安装的软件包: gdb-doc gdbserve...
1.core文件
当程序运行过程中出现Segmentation fault (core dumped)错误时,程序停止运行,并产生core文件。core文件是程序运行状态的内存映象。使用
gdb
调试core文件,可以帮助我们快速定位程序出现段错误的位置。当然,可执行程序编译时应加上-g编译选项,生成调试信息。
当程序访问的内存超出了系统给定的内存空间,就会产生Segmentation fault (core dumped),因此,段错误产生的情况主要有:
(1)访问不存在的内存地址;
(2)访问系统保护的内存地址;
(3)数组访问越界等。
core dumped又叫核心转储, 当程序运行过程
格式:x/
n:是正整数,表示需要显示的内存单元的个数,即从当前地址向后显示n个内存单元的内容,一个内存单元的大小由第三个参数u定义。
f:表示addr指向的内存内容的输出格式,s对应输出字符串,此处需特别注意输出整型数据的格式:
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
刚开始学习Qt,在调试程序时提示not in
executable
format
:file
format
not recognized
在查找资料后发现是因为编译器(Compiler)使用了32 位版本的 MSVC,调试器(Debugger)却使用了64 位的 MinGW 的
GDB
,从而
GDB
不能调试 32 位程序而报错。
解决办法:
在 Qt 的 工具 - 选项 - 构建和运行 - Debuggers 选择 CDB(Debugging Tools for Windows),
不能自动检测到则手动添
(
gdb
) core-file core.300
"/mnt/hgfs/d/fsvspsvn/src/pf/core.300" is not a core dump: File
format
not recognized
我们在运行程序的时候经常会碰到段错无 segment fault 的错误,这时候我们需要用
gdb
,然后用core-file 把生成的core.**
(
gdb
) print vec
$1 = std::vector of length 5, capacity 5 = {1, 2, 3, 4, 5}
(
gdb
) set $i = 0
(
gdb
) while ($i < vec.size())
> print vec[$i]
> set $i = $i + 1
$2 = 1
$3 = 2
$4 = 3
$5 = 4
$6 = 5
这个命令首先使用`print`命令输出整个vector,然后使用循环和`print`命令逐个输出每个元素的值。
以上两种方法都可以在
gdb
中输出`std::vector`类型的内容,但是建议使用第一种方法。因为它更简单,更直观,而且可以一次性输出整个vector的内容。