在php中可以通过xdebug来显示详细的错误信息,可以细化到哪个文件哪行代码引起的报错。在C语言里面也可以通过静态断言(assert)来使得调试代码更加方便。关于断言,可以作为一种很强大的调试方式或者程序运行时的错误诊断,但是断言也不是适合于各种地方,服务器软件和嵌入式程序一般不适用,断言会强制中断正在运行的程序,对于服务器等程序来说,将会是一个灾难。加上,断言会加剧CPU 的负载,其中会调用一些函数。
先看下面代码
void main() { //动态分配1字节内存 char *p = (char *)malloc(sizeof(char)); *p = 'h'; }
上面代码就是给指针变量p 动态分配1字节内存 ,然后把字符h赋值给指针变量p。但是会有一个问题,假如内存分配失败 ,则 *p = 'h' 会出错(空指针无法赋值)
可以加上静态断言来解决此问题
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<assert.h> 4 5 //assert 一般用于错误调试等功能 6 void main() 7 { 8 //动态分配1字节内存 9 char *p = (char *)malloc(sizeof(char));//malloc分配内存失败的时候返回null 10 assert(p!=NULL); //当p!=NULL成立是正常,否则会报出详细的错误信息 11 *p = 'h'; 12 13 printf("%c",*p); 14 }
如果我们想关闭静态断言的效果,可以直接使用一个开关来处理
1 #define NDEBUG //关闭静态断言的开关 2 3 #include<stdio.h> 4 #include<stdlib.h> 5 #include<assert.h>
注意:此开关需在定义在 #include<assert.h> 之前