首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux GDB调试c++程序

GDB 是GNU开源组织发布的一个强大的UNIX程序调试工具。...一般来说,GDB主要帮忙你完成下面四个方面的功能: 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 可让被调试程序在你所指定的调置的断点处停住。...(断点可以是条件表达式) 当程序被停住时,可以检查此时你的程序中所发生的事。 动态的改变你程序的执行环境。         ...从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能...3.6  继续运行直到下一个断点或主函数结束continue或者c ?                   3.7 退出调试 输入q ?

4.7K20

linux程序调试方法汇总

那么调试工具就显得尤为重要,linux作为笔者重要的开发平台,在linux中讨论调试工具主要是为那些入门者提供一些帮助。调试工具能让我们能够监测、控制和纠正正在运行的程序。...在Linux的用户空间调试工具主要有系统工具和专门调试工具:'print' 打印语句,这是新手最常用的,也是最不提倡使用的;查询 (/proc, /sys 等)系统的虚拟文件查看,这个方法有局限性;跟踪...-g test.c 现在我们有一个可执行文件叫做'test'。...例如,如果'x'是调试程序内的变量,'print x'会打印x的值。 检查源码: 源码可以在GDB中打印。默认情况,'list'命令会打印10行代码。...在GDB中获得帮助 总结 在这篇文章中,我们已经看到不同类型的Linux用户空间的调试工具。

3.8K21
您找到你想要的搜索结果了吗?
是的
没有找到

Linux环境通过GDB调试C项目实战

通过GDB调试找到程序的bug 请查看位于https://github.com/xmu-Linux101/Linux101/tree/201720182/experiments/gcc-5-gdb的代码...g 默认情况,gcc在编译时不会建个调试符号插入到生成的二进制代码中,如果需要生成调试符号信息,可以使用gcc -g选项,一般不加调试选项,否则会使代码增大。...gdb调试器的功能gdb 调试器的功能gdb调试器的功能 ​ 1.设置断点 ​ 2.单步执行程序,便于调试 ​ 3.查看程序中变量值的变化 ​ 4.动态改变程序的执行环境 ​ 5.分析崩溃程序产生的...core文件 以上这些就是这次实验的前置知识,需要我们采用gdb调试器来找出一些程序的bug 首先看一这个程序的目录结构: ?...,进行测试编写的代码功能是否正常执行 在找这个项目的bug之前我们必须确认一Makefile的内容是否有逻辑错误或者语法错误,这样才能保证我们后期的调试没有问题 输入vi Makefile,我们看到:

5.2K50

Linux使用VSCode配置C++调试环境

而这时,调试的作用就体现出来了。调试不仅仅可以用来 Debug,我觉得更重要的是它能帮你理清一个程序它是从何而始、至何而终以及它整个执行路线是什么。这便是我这篇文章为什么要介绍配置调试环境的原因。...安装完后,需要进一步进行配置才能使用: 首先用 VSCode 打开你要调试的项目目录,然后可以看到左侧栏出现一个调试按键,点击一会弹出如下提示: 图片 这是告诉你目前没有任何的配置文件来供编译调试,...注意,点击 Create a launch.json file 创建新的配置文件时,VSCode 主窗口要处在打开某一个 C++ 文件状态,这样它才能自动识别你是要进行 C++ 项目的编译调试工作。...好在这个插件已经给出了一般的配置模板,点击 Add Configuration,VSCode 会询问我们要选择何种调试工具,Linux 上一般都预装了 gdb,所以我们就选 C/C++: (gdb) Launch...附录 C++ Tutorial for Beginners #10: Debugging Makefile Project with Visual Studio Code IDE | (Linux GDB

7.2K31

LinuxC++命令行调试实战

Linux中编译C++代码的g++工具,以及g++的常用操作指令 2. LinuxC++命令行编译示例 3. Linux的GDB调试器常用指令 1....准备代码 创建一个C++源代码文件 src/04_debug/sum.cpp,添加以下代码 #include using namespace std; int main(int...,将会提示一图错误 因为no_g.out这个可执行文件不包含用于调试的信息,输入quit再按回车即可,通过gdb yes_g.out指令执行包含调试信息的可执行文件,看到以下输出 此时可以正常进入调试...使用p N 查看N的值,如下图 此时程序执行到第11行处,如果我们需要继续执行,输入continue指令并按回车即可,程序将执行到代码的第12行,如下图 因为我们是在while循环体内,i的值将不断变化...在gdb调试中,如果我们只按回车键,gdb将执行我们最后一次输入的指令,所以我们可以一直按回车键继续让程序单步执行。

3K20

Linux笔记】Linux编译C语言程序

在上一篇笔记中有分享Linux的vi/vim编辑器的使用方法(【Linux笔记】Vi/Vim编辑器),现在我们就可以使用vi/vim编辑器编写C代码了。那么写完代码该怎么进行编译呢?...关于在Windows命令行编译C程序的方法可查看往期笔记:【C语言笔记】windows命令行编译C程序、【C语言笔记】使用notepad++、MinGW来开发C程序。...以上就是在Linux编译C程序的基本方法,适用于源文件不多的情况。后续的笔记中还会分享其他编译方法,欢迎持续关注!如果你觉得对你有用的话,麻烦帮忙点个赞。...在Linux进行C语言编程的学习可能会增加学习的成本,但是从长远来看仍然是有必要的。...若不想安装Linux系统,也想适应一Linux环境,则可参考往期笔记:【C语言笔记】Windows下体验Linux环境。

12.4K10

Linuxc程序的内存映像

前言 今天开始分享C语言里面的存储类型、作用域、生命周期、链接属性等知识点,我们写完一个程序,不只说知其,更要知其所以然。...(2)内存有多种管理方法:栈、堆、数据段、bss段、.text段等,其实这个Linux环境可以查看以ELF结尾的可执行程序,可以看到所说的这些的;一个变量的存储类属性就是描述这个变量存储在何种内存段中。...(3)研究变量的生命周期可以我们理解程序运行的一些现象、理解C语言的一些规则。 - 链接属性 - (1)大家知道程序从源代码到最终可执行程序,经历的过程:编译、链接。...Linuxc程序的内存映像 - 代码段、只读数据段 - (1)对应着程序中的代码(函数),代码段在linux中又叫文本段(.text)。...- 内核映射区 - (1)内核映射区就是将操作系统内核程序映射到这个区域了。 (2)对于linux中的每一个进程来说,它都以为整个系统中只有它自己和内核而已。

2.9K20

linux使用gcc编译运行C程序

gcc(GNU Compiler Collection)是Linux最常用的C语言编译器,是GNU项目中符合ANSI C标准的编译系统,能够编译用CC++和Object C等语言编写的程序。 ...在linux系统中,常见的使用方法有两种,如下: gcc -o out in1 in2 //gcc编译以及链接(对in1文件和in2文件进行编译生成...out.o文件,“-c”:表示只生成*.o文件) 若在arm板里运行,就需要在linux系统中使用arm-linux-gcc交叉编译才行: arm-linux-gcc -o out in1...in2 //gcc编译以及链接(对in1文件和in2文件进行编译生成out.bin文件,“-o”:表示生成可执行文件) arm-linux-gcc -c...以编译两个程序a.c和hello.c为示例: vi a.c                                 //编辑a.c , 它将被hello.c调用,前提是这两个文件必须在同一目录下

7.3K90

linux使用gcc编译运行C程序

gcc(GNU Compiler Collection)是Linux最常用的C语言编译器,是GNU项目中符合ANSI C标准的编译系统,能够编译用CC++和Object C等语言编写的程序。 ...在linux系统中,常见的使用方法有两种,如下: gcc -o out in1 in2 //gcc编译以及链接(对in1文件和in2文件进行编译生成...out.o文件,“-c”:表示只生成*.o文件) 若在arm板里运行,就需要在linux系统中使用arm-linux-gcc交叉编译才行: arm-linux-gcc -o out in1...in2 //gcc编译以及链接(对in1文件和in2文件进行编译生成out.bin文件,“-o”:表示生成可执行文件) arm-linux-gcc -c...以编译两个程序a.c和hello.c为示例: vi a.c                                 //编辑a.c , 它将被hello.c调用,前提是这两个文件必须在同一目录下

6K70

LinuxShell脚本的调试

这篇博文是对Debugging Shell Scripts in Linux的翻译,希望能帮助到在Linux写Shell脚本的童鞋。...大多数编程语言都有可用的调试工具,调试工具可用在执行程序或脚本的时候让你检查其内部是如何进行的。...对于Shell脚本,我们没有任何可用的调试工具,唯一有的是通过命令行的标识(-n,-v和-x)来辅助我们调试脚本。...Displaying the Scripts Commands ( -v option ) 所谓的-v标识使得Shell可以在详细输出模式(verbose mode)运行。...通常情况,单独的-x命令可以帮助我追溯脚本的问题。 大多数时候,-x标识都会提供关于脚本的特别有用的信息,但是它也会导致大量的输出。下面的例子说明了如何在实践中使用。

21010

LinuxGDB调试指令总结

摘要 之前写C++的一些程序都是在windows,直接使用VS2017的傻瓜式编译器,最近尝试摸索在linux进行C++程序的编译,有了一些成果!特此总结!...代码调试器:避免不了,程序会出现bug,但是使用命令行编译出错后是没有调试信息的(g++编译时),因此我们需要使用gdb对程序进行调试。 ?...启动gdb后,可以进入到交互模式,通过以下命令对程序完成调试工作!...05 打印表达式 print 表达式(简记p): 其中“表达式”可以是任何当前正在被测试程序的有效表达式,比如当前正在调试C语言的程序,那么“表达式”可以是任何C语言的有效表达式,包括数字,变量甚至是函数调用...如:display a watch 表达式:设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试程序

4.5K20

Linuxkernel调试环境搭建

方法1 方法2 GDB调试 查看函数地址 加载第三方ko 调试ko qemu pci设备相关 查看PCI设备信息 前言 环境搭建在虚拟机ubuntu16.04进行(vm配置开启cpu虚拟化) 一般内核调试需要的东西就是内核镜像和磁盘镜像...linux-4.15.tar.gz 解压进入 tar -xzvf linux-4.15.tar.gz cd linux-4.15 设置编译选项 make menuconfig 勾选以下项目: Kernel...有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android 系统的自带的shell。.../new_rootfs.img 方法2 借助base64编码从shell中直接写入(适用于写exp等) GDB调试 一般只需要设置好架构然后remote一就行,如果是非x86的架构可能要用gdb-multiarch...cat /proc/kallsyms可以显示出内核中所有的函数符号和对应地址,在gdb中下断即可 例如可以断在这个函数:cat /proc/kallsyms | grep get_user_pages,断后尝试执行

2.3K20

Linux系统gdb调试(一)

这段时间逛了一招聘网站上,对于嵌入式要求里面有要求会gdb调试,而且再加上昨天在交流群里面,刚好有网友问gdb怎么调试,这让我学gdb调试的欲望越来越强烈,这不,应网友的要求,今天就来给大家分享自己总结的实战调试方法...Linux 的GDB(GNU Debugger)是-一个用来调试CC++程序的功能强大的调试器,它能够在程序运行的过程中观察程序的内部结构和内存的使用情况。...3、gdb命令+实战演示: gdb的使用非常简单,只要在Linux的命令提示符输入gdb命令,系统便会启动gdb。...有时在精化阶段调试程序是必要的。在这些在某些情况,使用start命令将停止程序的执行太晚了,因为程序已经完成了精化阶段。...但是你在Linux环境编译的时候会报一个警告,不会报错,不细心的人,可能平常习惯了说有警告没啥关系,然后就直接运行,可以后面没想到,出现了下面这种情况: 下面我们使用gdb来调试这个程序

3.7K10

用Visual Studio调试linux程序

用Visual Studio调试linux程序?你真的没看错,这个是真的,不是标题党。当然如果你说VS2015及以上版本自带的linux调试插件,那就算了。...这种方法有个缺点是,不能从开始启动的main函数处添加断点,自始至终地调试程序,查看完整程序运行脉络,所以下面推荐方法二。 方法二、利用VS启动远程linux机器上一个linux程序文件进行调试。...Debugged program是需要设置的被调试程序的路径,位于远程linux机器上。 Arguments是该调试程序需要设置的命令行参数,如果被调试程序不需要命令行参数可以不设置。...注意,有些窗口只有在调试状态才可见。...这里有两个值得强调一的功能是: GDB Session窗口,在这个窗口里面可以像原来直接使用gdb调试一样输入gdb指令来进行调试。 ?

5.7K60

C语言: ---windowsVS Debug调试

首先我先列出来常用的一些命令或者键盘控制: F5 开始调试,执行到断点 Shift + F5 停止调试 F9 在光标所在行添加断点 Shift + F9 QuickWatch Shift Ctrl F9...更加详细的调试命令可以在VS上查看到: 、 ?...或者,我插入一个条件断点:当i==8的时候,调试程序在此处断点暂停。 ? 3.如何查看d和i的值呢 我们有个监视栏,可以通过鼠标拖动代码里的变量到监视,或者直接在监视栏输入变量名 ?...这里不难看出,Demo结构体的内存对齐规则,默认是4字节对齐,当然你可以通过程序来修改对齐方式。...a占4自己,c虽然是字符类型只有1字节,但是由于后边的b是4字节,因此c也只能占用4字节,因此Demo结构体的占用字节大小为12.

96830

linuxgdb常用的调试命令

用gdb调试程序时,常常很困惑一些命令的使用,要么是不知道这个命令,要么忘了命令的使用方法。...gdb常用: run 启动程序运行 next 单步执行(不到函数内部) step 单步执行,跟踪到函数内部 finish 继续执行,直到当前函数结束 continue 继续执行,直到下一个断点...elements 0 默认这里设置是200,设置为0表示没有限制 还有其它一些set命令可以试试: set print address set print address on 打开地址输出,当程序显示函数信息时...系统默认为打开的 set print object 在C++中,如果一个对象指针指向其派生类,如果打开这个选项,GDB会自动按照虚方法调用的规则显示输出,如果关闭这个选项的话,GDB

2.9K20
领券