c语言调试开关】的更多相关文章

上一篇转载的没看懂,参考别人的代码,自己又琢磨了一个调试技巧,挺好用,姑且就叫调试开关吧,欢迎指正!!! /*功能:调试开关 *描述: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…
很多时候都需要调试GDAL库,尤其是像学习GDAL库中的某些算法是如何实现的时候,调试就必不可少了. 首先说明用C++的调试.以VS2008为例进行说明. 编译DEBUG版本的GDAL库,这个可以参考我之前的博客.可以用命令行编译,也可以用IDE编译,但是实质都是一样,修改 nmake命令的参数.也就是给nmake命令后加一句DEBUG=1即可. 编译完成之后,应该会在gdal的源码目录中生成下面几个文件,如下图. 调试时用到的文件主要就是pdb文件,请确保pdb文件存在,大小应该在30M以上说…
背景 随着现在移动端设备的硬件性能的提高,现在web页面的体验逐渐变得可以接受,现在很多的应用都采用的Hybrid开发模式,一方面有利用了原生设备的API的优势(性能好.用户体验好),另一方面利用了web开发的优势(跨平台,开发成本低).比如微信.QQ.58同城.美团.爱奇艺等等应用都是采用的Hybrid开发模式. Hybrid应用如何去做自动化呢? Hybrid是native嵌套了web,对于native页面,我们可以采用原生的自动化框架UIAutomator/XCUITest,而对于web页…
http://blog.chinaunix.net/uid-10106787-id-2985587.html 在C语言程序设计中,常会出现各种各样的bug:段错误.参数异常等等.我们需要尽快定位错误,输出异常信息,出错位置及调用层次等,这对于解决bug问题是非常方便的,所以设计了如下调试接口. 调试级别:共有三级,不同的级别对于错误采取不同的处理方法,如异常退出还是函数返回还是仅仅输出错误信息,调试级别越高,给出的错误信息越详细. 最高调试级别assert,当断言失效时打印最详细的出错信息,包括…
说明:在我们调试C语言的过程中,经常会遇到duplicate symbol错误(在Mac平台下利用Xcode集成开发环境).如下图: 一.简单分析一下C语言程序的开发步骤. 由上图我们可以看出C语言由编写源程序->编译->链接->运行几个步骤进行. 编写源程序: C语言的源文件的扩展名为.c,源文件以ASCII的形式存储,不能直接被计算机执行. 编译: 1.把C语言源程序翻译成计算机可以识别的二进制代码,由编译器完成. 2.编译的同时进行语法检查,如果发现语法错误,则编译失败.如果编译成…
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…
linux系统下,在不gdb调试的情况下,我们如何解决程序崩溃问题呢?首先想到的就是添加log日志信息,其次还有以下几种方法可以帮助我们分析存在的问题: (一)add2line 程序崩溃时会打出一些崩溃地方的地址空间,可以使用此方法显示崩溃地方对应的函数或者某一行,使用方法如下: echo "0x63d8a9" | addr2line -e bin/httpd -f  : 崩溃查对应代码行 (二)把出错时的堆栈信息打印出来,类似gdb调试中bt功能. #define BACKTRACE…
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:…
C++ 预处理器_w3cschool https://www.w3cschool.cn/cpp/cpp-preprocessor.html C++ 预处理器 预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理. 所有的预处理器指令都是以井号(#)开头,只有空格字符可以出现在预处理指令之前.预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾. 我们已经看到,之前所有的实例中都有 #include 指令.这个宏用于把头文件包含到源文件中. C++ 还支持很多预处理指令,比如 #in…
这里记录一下调试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…
在一般象gentoo等发行版中,系统安装tomcat这类软件后会产生一些启动脚本, 比如是/etc/init.d/tomcat-7, 启动方式与原始的tomcat不太一样.在gentoo中,假设须要远程调试tomcat的web应用,可能将下面一行改动一下: 在开头大概10多行, 将下面 : ${TOMCAT_START:=start} 改动成 : ${TOMCAT_START:=jpda start} 就可以.…
经常看到有人介绍一些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 格式化输出函数printf("%d %s",a,str):格式化控制符之间不能有“逗号”,可以用空格 1.1格式化输入函数scanf(“%d”,t)格式化控制符之间不能有空格 2.1 指针:运用指针虽然效率高,但在指针运算时一定要谨慎指针的越界(上界和下界),例如P+i+1或者p+i-1   i++/i--.必要时要进行边界值带人推演. 2.2 指针必须先赋值(有所指向)然后才可以使用. 3.1 函数:函数独立性要强,每个函数完成一定功能,集成度要低,这样便于逐个调试垒积木(调试成…
调试器的使用 编译输出带调试信息的程序 调试信息包含:指令地址.对应源代码及行号 指令完成后,回调 LINUX使用GDB MAX使用LLDB 使用说明 // 开始调试testlib程序 lldb testlib // 在main函数的位置打断点 b main dwarfdump testlib 可以直接查看debug信息…
C++ 预处理器_w3cschool https://www.w3cschool.cn/cpp/cpp-preprocessor.html C++ 预处理器 预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理. 所有的预处理器指令都是以井号(#)开头,只有空格字符可以出现在预处理指令之前.预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾. 我们已经看到,之前所有的实例中都有 #include 指令.这个宏用于把头文件包含到源文件中. C++ 还支持很多预处理指令,比如 #in…
开启 GPU Render 的profiling bar: adb shell setprop debug.hwui.profile visual_bars #或visual_lines adb shell setprop debug.hwui.profile.maxframes 400 #控制汇总条长度 打开 Overdraw 检查: adb shell setprop debug.hwui.overdraw show 查看dirty区域: adb shell setprop debug.hw…
/* * 宏的写法,宏的作用域,当前位置开始到大括号结束,如果没有大括号,到文件结尾. */ #include <stdio.h> //#define HELLO int main(int argc, const char * argv[]) { // insert code here... #ifdef HELLO printf("Hello, World!\n"); #else printf("fjdla\n"); #endif #define HE…
1. 参考 Turning on debug output for python 3 urllib https://bugs.python.org/issue26892 Python爬虫入门四之Urllib库的高级用法  5.使用DebugLog 2. 代码 (1) python2 # python2 import httplib import urllib httplib.HTTPConnection.debuglevel = 1 response = urllib.urlopen('http…
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机器上都会碰到这个问题 解决方法: 启动黑月重新编译器…
对于厌烦了的 print 和 echo,可以尝试点新鲜省力的小手段. 1. 使用 shell 的执行选项 sh 和 bash 常用的执行指令有:-n.-x.-c.-v. 其中: -n 是 noexec 的简写,作用是只做脚本的语法检查,而不执行脚本. -x 是 xtrace 的简写,作用是在每一行代码执行之前,将代码本身打印到标准输出(代码前添加一个 “+” 用来区别).这个在调试的时候尤其有用. -c 是 command string 的缩写,使用该选项从字符串而不是文件读取脚本.比如,sh…
转自:http://my.oschina.net/fgq611/blog/113249 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核的关键在于你的对内核的深刻理解. 一  调试前的准备 在调试一个bug之前,我们所要做的准备工作有: 有一个被确认的bug. 包含这个bug的内核版本号,需要分析出这个bug在哪一个版本被引入,这个对于解决问题有极大的帮助.可以采用二分查找法来逐步锁定bug引入版本号. 对内核代码理解越深刻越好,同…
目录[-] 一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG_ON() 2  dump_stack() 五  printk() 1  printk函数的健壮性 2  printk函数脆弱之处 3  LOG等级 4  记录缓冲区 5  syslogd/klogd 6  dmesg 7 注意 8 内核printk和日志系统的总体结构 9  动态调试 六  内存调试工具 1  MEMWATCH 2…
文件操作: 知识点: 持久化 1.文本文件的读写 2.二进制文件的读写 3.缓冲文件系统 1.打开文件 2.读写文件 3.保存 4.关闭文件 ====================================== 文本文件的读写 1.文件的打开 1)打开模式 r(read) 读文件,不存在,打开失败 w(write) 写文件,如果文件不存在,创建文件,存在则清空文件内容 a(append) 以追加方式写文件 a+ 读写方式打开,以追加方式写文件 r+ 读写方式打开,文件存在打开 w+ 读写…
源:单片机modebus RTU通信实现,采用C语言,可适用于单片机,VC,安卓等 //modebus_rtu.c /************************************************************************************************************* * 文件名: MODEBUS_RTU.c * 功能: MODEBUS_RTU通信协议层 * 作者: cp1300@139.com * 创建时间: 2014-03-…
Linux内核调试方法总结 一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG_ON() 2  dump_stack() 五  printk() 1  printk函数的健壮性 2  printk函数脆弱之处 3  LOG等级 4  记录缓冲区 5  syslogd/klogd 6  dmesg 7 注意 8 内核printk和日志系统的总体结构 9  动态调试 六  内存调试工具 1  ME…
shell是Linux系统上常用的一种脚本语言.一般从事web后台开发的从业者,都会用到shell,因此shell调试也是一项必备的技能.本文教你如何进行shell脚本调试. 工具/原料   Linux操作系统 ssh工具(SecureCRT) 方法/步骤     启动Linux系统,用ssh工具(xshell或者SecureCRT等)连上Linux系统.我用的是SecureCRT,若SecureCRT不会用,可以自己百度或者留言沟通.用SecureCRT连上之后,如图所示.   shell脚本…
一般的调试流程其实很简单:发现问题,稳定复现,确定临界条件,定位问题,修复问题,核查结果.迭代这个过程,形成一个闭环 老实说,OS的实验代码,开箱体验极差,程序跳来跳去,进了Lab4后还要考虑内核态切换,很难靠肉眼完成上述闭环.debug愉悦指数为负. 所以在几周的探索后,我大概总结整理了一些调试经验,主要是如何在当前体系下利用或构建调试工具,改善调试体验. 我们的口号是:没有蛀牙. 抛砖引玉. 从0开始:现在我们有什么 现在我们手里有: 一坨新鲜的系统代码. 上学期积累的老练的MIPS 32汇…