一、C语言调试—— gdb 的使用】的更多相关文章

1.1 gdb 调试工具常用命令 list:展开调试的源代码,缩写 l: break:设置断点,缩写为 b: info break:查看断点信息,缩写为 i b delete:删除断点 print:打印变量的值,缩写为 p: run:程序开始运行,缩写 r,在 r 后可以加入程序启动启动参数,程序运行到断点处暂停: step:单步调试,可以进入子函数,缩写为 s: next:单步调试,不进入子函数,缩写为 n: continue:程序继续运行,,到下一断点处暂停,缩写为 c: set args:…
很多时候都需要调试GDAL库,尤其是像学习GDAL库中的某些算法是如何实现的时候,调试就必不可少了. 首先说明用C++的调试.以VS2008为例进行说明. 编译DEBUG版本的GDAL库,这个可以参考我之前的博客.可以用命令行编译,也可以用IDE编译,但是实质都是一样,修改 nmake命令的参数.也就是给nmake命令后加一句DEBUG=1即可. 编译完成之后,应该会在gdal的源码目录中生成下面几个文件,如下图. 调试时用到的文件主要就是pdb文件,请确保pdb文件存在,大小应该在30M以上说…
GDB(GNU Debugger) gcc -g –o testarg testarg.c //可执行文件中带上调试信息,用于后续的gdb调试 gdb testarg l; list //显示源程序 b 6; break 6 //在第6行设置断点 r; run // n; next 单步执行,不跟踪进函数 s:step (into) 单步执行,跟踪进函数 p i; print i 打印变量的值 delete 1 //删除第一个断点 info b //显示所有的断点 disable 1 //让1号…
调试是每个程序员都会面临的问题. 如何提高程序员的调试效率, 更好更快地定位程序中的问题从而加快程序开发的进度, 是大家共同面对的问题. 可能Windows用户顺口就会说出:用VC呗 :-) , 它提供了设置断点, 单步跟踪等的图形界面, 使调试起来直观易用. 但Linux用户可能要生闷气了 O:-) : 难道我们Linux程序员就只能使用原始的调试方法, 在代码中加入printf信息吗?难道Linux下就没有好的C语言调试工具吗? 当然不是了. GNU早就组织开发了一套C语言编译器(Gcc)和…
1.此文档演示如何使用gdb调试c语言代码. 代码如下: #include <stdio.h> /*函数声明*/ void digui(int n); int main() { ; digui(n); ; } void digui(int n) { printf("level1-value of %d\n",n); ){ digui(n-); } printf("level2-value of %d\n",n); } 2.编译debug模式下的程序,编译…
调试器的使用 编译输出带调试信息的程序 调试信息包含:指令地址.对应源代码及行号 指令完成后,回调 LINUX使用GDB MAX使用LLDB 使用说明 // 开始调试testlib程序 lldb testlib // 在main函数的位置打断点 b main dwarfdump testlib 可以直接查看debug信息…
Get gdb call stack http://blog.csdn.net/zoufeiyy/article/details/1490241 Debugging with GDB - Examining the Stack  http://web.mit.edu/gnu/doc/html/gdb_8.html ()准备: gcc -g ###############################################################################…
在很多人的眼里,C语言和linux常常是分不开的.这其中的原因很多,其中最重要的一部分我认为是linux本身就是C语言的杰出作品.当然,linux操作系统本身对C语言的支持也是相当到位的.作为一个真正的程序员来说,如果没有在linux下面用C语言编写过完整的程序,那么只能说他对C语言本身的理解还相关肤浅,对系统本身的认识也不够到位.作为程序员来说,linux系统为我们提供了很多理想的环境,这其中包括了下面几个方面,        (1)完善的编译环境,包括gcc.as.ld等编译.链接工具   …
gdb常用命令: [root@redhat home]#gdb 调试文件:启动gdb (gdb) l :(字母l)从第一行开始列出源码 (gdb) break n :在第n行处设置断点 (gdb) break func:在函数func()的入口处设置断点 (gdb) info break: 查看断点信息 (gdb) r:运行程序 (gdb) n:单步执行 (gdb) c:继续运行 (gdb) p 变量 :打印变量的值 (gdb) bt:查看函数堆栈 (gdb) finish:退出函数 (gdb)…
说明:在我们调试C语言的过程中,经常会遇到duplicate symbol错误(在Mac平台下利用Xcode集成开发环境).如下图: 一.简单分析一下C语言程序的开发步骤. 由上图我们可以看出C语言由编写源程序->编译->链接->运行几个步骤进行. 编写源程序: C语言的源文件的扩展名为.c,源文件以ASCII的形式存储,不能直接被计算机执行. 编译: 1.把C语言源程序翻译成计算机可以识别的二进制代码,由编译器完成. 2.编译的同时进行语法检查,如果发现语法错误,则编译失败.如果编译成…
linux系统下,在不gdb调试的情况下,我们如何解决程序崩溃问题呢?首先想到的就是添加log日志信息,其次还有以下几种方法可以帮助我们分析存在的问题: (一)add2line 程序崩溃时会打出一些崩溃地方的地址空间,可以使用此方法显示崩溃地方对应的函数或者某一行,使用方法如下: echo "0x63d8a9" | addr2line -e bin/httpd -f  : 崩溃查对应代码行 (二)把出错时的堆栈信息打印出来,类似gdb调试中bt功能. #define BACKTRACE…
http://blog.chinaunix.net/uid-10106787-id-2985587.html 在C语言程序设计中,常会出现各种各样的bug:段错误.参数异常等等.我们需要尽快定位错误,输出异常信息,出错位置及调用层次等,这对于解决bug问题是非常方便的,所以设计了如下调试接口. 调试级别:共有三级,不同的级别对于错误采取不同的处理方法,如异常退出还是函数返回还是仅仅输出错误信息,调试级别越高,给出的错误信息越详细. 最高调试级别assert,当断言失效时打印最详细的出错信息,包括…
参考网上的资料,写了一个configprint模块,其功能为打印输出location配置内容,并计数访问次数. 代码链接如下:https://github.com/PaulWeiHan/nginx_module_development 程序的编写到运行总不是一帆风顺的,编译通过,运行不过的情况是最让我抓狂的. 这里记录一下gdb调试过程.供大家参考: (这里没有gdb命令说明,请自行百度) 我使用的是nginx的默认模式即: daemon on; master_process on; worke…
Qt的安装配置请参考本博客本分类下的其他相关文章,本文主要整理在调试时候遇到的问题和解决方法供遇到同样问题的同学参考.由于我之前也没有任何Qt的开发基础,做的也是硬件方面设计,所以这方面基础还是比较薄弱,这儿主要记录摸索过程中的一点心得体会. Qt的安装和初步配置请参见:Qt Creator的配置和开发初步测试 本文的软件环境: Win7 32bit Qt 4.8.4 Qt Creator 2.6.1 MinGW 4.4 摸索了一段时间的Qt和OpenCV,3个平台都有涉及,最大的问题还在于资源…
https://software.intel.com/en-us/blogs/2014/05/10/debugging-performance-issues-in-go-programs https://studygolang.com/articles/2729 Go 程序的性能调试问题 假设你手上有个Go语言编写的程序,你打算提升它的性能.目前有一些工具可以为此提供帮助.这些工具能帮你发现包括CPU.IO和内存在内多种类型的热点.所谓热点,是指那些为了能显著提升性能而值得你去关注的地方.有时候…
C 语言经常在实际的调试过程中,使用最基本的调试方法printf,我们可以使用__FILENAME__.__FUNCTION__.__LINE__,增加自己的输出宏定义: #define DVR_PRT(format,...)  printf("[File:"__FILE__", Line:%d]  "format, __LINE__, ##__VA_ARGS__) #define PRT(format,...)  printf("[File:%s, Li…
查看栈信息 当程序被停住了,首先要确认的就是程序是在哪儿被断住的.这个一般是通过查看调用栈信息来看的.在gdb中,查看调用栈的命令是backtrace,可以简写为bt. (gdb) bt    #0 pop () at stack.c:10    #1 0x080484a6 in main () at main.c:12 也可以通过info stack命令实现类似的功能(我更喜欢这个命令): (gdb) info stack    #0 pop () at stack.c:10    #1 0x…
版权声明:本文为博主原创文章,未经博主允许不得转载. 先写个helloworld吧,在Android源码树中创建文件夹external/helloworld,加入文件: // helloworld.c #include <stdio.h> #include <stdlib.h> int main(int argc, char** arv) { printf("Hello world~\n"); ; } # Android.mk LOCAL_PATH := $(c…
经常看到有人介绍一些IDE或者像gdb这样的调试器的很高级的调试功能,也听人说过有些牛人做工程的时候就用printf来调试,不用特殊的调试器.特别是在代码经过编译器一些比较复杂的优化后,会变得“难以辨认”,使用调试器也变得有些头疼.先举个简单的例子: 1 #include <stdio.h> 2 3 int main(){ 4 int a[6], i, sum = 0; 5 for(i = 0; i<6; i++) 6 a[i] = i<<2; 7 a[3] = 5; 8 f…
1.windos store---ubuntu18 2.改安装源 3.装gcc   apt-install 即可 4.装gdb       apt-instll 即可 5.写helloworld 记做1.c文件 #include <stdio.h> int main() { printf("Hello World!\n"); return 0; } 6. gcc -g 1.c                  这里面的-g参数表示开启调试 7. gdb -tui 进入后fi…
简介 cgdb是一款轻量级的基于gdb的命令行可视化工具,关系大致如下: 尽管gdb本身可以通过layout src的命令显示源码布局,但是其功能还是过于简陋. 使用cgdb并不需要你重新去学习过多额外的命令,你依然可以像原来使用gdb一样去使用它. 安装 直接系统安装(可能非最新版本): sudo apt-get install cgdb 若要安装最新版本,可以从源码编译安装: # 先安装相关依赖(已安装的可略过),以 Ubuntu18.04 为例: sudo apt install auto…
上一篇转载的没看懂,参考别人的代码,自己又琢磨了一个调试技巧,挺好用,姑且就叫调试开关吧,欢迎指正!!! /*功能:调试开关 *描述:if条件成立,则打印调试信息,否则不打印() * */ #include<stdio.h> #if 1 //为0时调试关闭, 为1时调试打开 #define DEBUG_OUT(fmt, args...)\ printf("file:%s func:%s line:%d\n", __FILE__, __func__, __LINE__) #e…
在调试程序时,经常会用到assert和printf之类的函数,我最近做的这个工程里就有几百个assert,在你自认为程序已经没有bug的时候,就要除去这些调试代码,应为系统在正常运行时这些用于调试的信息是无用的,而且会占用时间和空间.怎么删除呢,俺以前都是用笨方法,一个一个注释,能用注释也是经过改进的方法,俺最早都是删掉之后出了问题再重新写的,但是这次几百个一个一个删除的话可是要了俺的小命了,一首mp3听完,还不到一百个.以前看过st的函数库,老外的代码就是规范,俺现在的代码好多都是在st和ti…
这里记录一下调试golang gc的方法 启用gc打印: # GODEBUG=gctrace=1 go run ./main.go 程序启动后gc将打印如下信息: gc 65 @16.996s 0%: 0+1.0+0 ms clock, 0+0/1.0/2.0+0 ms cpu, 10->10->4 MB, 11 MB goal, 4 P gc 66 @100.235s 0%: 0+1.0+0 ms clock, 0+1.0/1.0/2.0+0 ms cpu, 9->9->3 MB…
1 格式化输出函数printf("%d %s",a,str):格式化控制符之间不能有“逗号”,可以用空格 1.1格式化输入函数scanf(“%d”,t)格式化控制符之间不能有空格 2.1 指针:运用指针虽然效率高,但在指针运算时一定要谨慎指针的越界(上界和下界),例如P+i+1或者p+i-1   i++/i--.必要时要进行边界值带人推演. 2.2 指针必须先赋值(有所指向)然后才可以使用. 3.1 函数:函数独立性要强,每个函数完成一定功能,集成度要低,这样便于逐个调试垒积木(调试成…
1.  从 https://github.com/derekparker/delve.git 下载delve压缩包delve-master.zip. 2. 使用 winscp 工具将delve-master.zip 远程到 linux机器里面. 3. 解压压缩包:unzip delve-master.zip 4. 复制压缩包到指定的路径下,否则编译会出错:cp -r ./delve-master /root/go/src/github.com/go-delve/delve/ 5. 进入路径下面:…
这是个历史问题,几乎所有的Win7x64机器上都会碰到这个问题 解决方法: 启动黑月重新编译器…
用Go语言已经有一段时间了,总结一下如何用GDB来调试它! ps:网上有很多文章都有描述,但是都不是很全面,这里将那些方法汇总一下 GDB简介  GDB是GNU开源组织发布的⼀一个强⼤大的UNIX下的程序调试⼯工具.或许,各位⽐比较喜欢那种图形界⾯面⽅方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会 发现GDB这个调试⼯工具有⽐比VC.BCB的图形化调试器更强⼤大的功能.所谓“⼨寸有所⻓长,尺有所短”就是这个道理. 目前支持的语言 (GNU gdb (GDB) 7.8…
GDB 是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形成执行 序列,形成脚本.UNIX 下的软件全是命令行的,这给程序开发提供了极大的便利,命令行 软件的优势在于, 他们可以非常容易的集成在一起, 使用几个简单的已有工具的命令,可就 以做出一个非常强大的功能. 于是 UNIX 下的软件比 windows 下的软件更能有机的结合,各自发挥各自的长处,组合 成更为强筋的功能.而 windows 下的图形软件基本上各自为营,互相不能条用,很不利于 各种软件的相互集成.在这里并不是要…
GDB堆栈跟踪与汇编调试 堆栈跟踪 源代码: 对预先编写的 stack.c 文件进行编译,并且使用 CGDB 进行调试,对堆栈进行跟踪,了解该代码堆栈是如何变化的. 在 CGDB 中,先设置 main 断点,接着运行(run),使用 frame info frame 分别查看当前栈帧的简要信息,以及该栈帧的详细信息.其中: frame 打印出的信息:栈的层编号,当前的函数名,函数参数值,函数所在文件及行号,函数执行到的语句. info frame 打印出的信息:函数地址,调用函数的地址,被调用函…