当前位置: 首页 > news >正文

wordpress建立栏目杭州seo运营

wordpress建立栏目,杭州seo运营,郫县做网站,买空间送网站前言 本文对lwip中debug.h文件里的调试相关宏进行分析。 正文 debug.h中有3个重要的调试相关宏: LWIP_ASSERT(message, assertion) LWIP_ERROR(message, expression, handler) LWIP_DEBUGF(debug, message) 断言 LWIP_ASSERT(message, assertion) 源代码为&…

前言

本文对lwip中debug.h文件里的调试相关宏进行分析。

正文

debug.h中有3个重要的调试相关宏:
LWIP_ASSERT(message, assertion)
LWIP_ERROR(message, expression, handler)
LWIP_DEBUGF(debug, message)

断言

LWIP_ASSERT(message, assertion)
源代码为:

#define LWIP_ASSERT(message, assertion) do { if (!(assertion)) { \LWIP_PLATFORM_ASSERT(message); }} while(0)

message为断言触发时输出的字符串,assertion为一个布尔值,展开后:

if (!(assertion))
{printf("Assertion \"%s\" failed at line %d in %s\n", message, __LINE__, __FILE__); fflush(NULL);  //更新文件系统abort();	   //程序中止运行
}

当判断条件不为真时,打印断言原因,输出断言所在文件名和文件中行数,更新文件系统 ,中止程序运行。
例子:

err_t
ethernetif_init(struct netif *netif)
{struct ethernetif *ethernetif;LWIP_ASSERT("netif != NULL", (netif != NULL));。。。。。。/* initialize the hardware */low_level_init(netif);return ERR_OK;
}

网卡初始化部分代码,当传入指针为空时,触发断言。

错误处理

LWIP_ERROR(message, expression, handler)
源码为:

#define LWIP_ERROR(message, expression, handler) do { if (!(expression)) { \LWIP_PLATFORM_ERROR(message); handler;}} while(0)

message为一段错误发生时输出的字符串,expression为错误判断条件,handler为一段代码,展开如下:

if (!(expression)
{printf(message);handler;
}

当判断条件不为真后,输出错误原因,执行错误处理代码handler
例子:

err_t
netconn_getaddr(struct netconn *conn, ip_addr_t *addr, u16_t *port, u8_t local)
{API_MSG_VAR_DECLARE(msg);err_t err;LWIP_ERROR("netconn_getaddr: invalid conn", (conn != NULL), return ERR_ARG;);LWIP_ERROR("netconn_getaddr: invalid addr", (addr != NULL), return ERR_ARG;);LWIP_ERROR("netconn_getaddr: invalid port", (port != NULL), return ERR_ARG;);。。。。。。return err;
}

传入指针为空,打印错误原因,返回ERR_ARG错误码。

调试打印

LWIP_DEBUGF(debug, message)
源码为:

#define LWIP_DEBUGF(debug, message) do { \if ( \((debug) & LWIP_DBG_ON) && \((debug) & LWIP_DBG_TYPES_ON) && \((s16_t)((debug) & LWIP_DBG_MASK_LEVEL) >= LWIP_DBG_MIN_LEVEL)) { \LWIP_PLATFORM_DIAG(message); \if ((debug) & LWIP_DBG_HALT) { \while(1); \} \} \} while(0)

debug包含了多个用于控制调试行为的位标志。message是要调试打印的字符串。
展开后:

if (((debug) & LWIP_DBG_ON) && ((debug) & LWIP_DBG_TYPES_ON)) && ((signed short)((debug) & LWIP_DBG_MASK_LEVEL) >= LWIP_DBG_MIN_LEVEL))
{printf(message);if ((debug) & LWIP_DBG_HALT){	while(1);}
}

其中:

#define LWIP_DBG_TYPES_ON               LWIP_DBG_ON
/** flag for LWIP_DEBUGF to enable that debug message */
#define LWIP_DBG_ON            0x80U
/** flag for LWIP_DEBUGF to disable that debug message */
#define LWIP_DBG_OFF           0x00U

可见LWIP_DBG_TYPES_ONLWIP_DBG_ON是一样的,都是0x80U
debug的第15位置1时,开启调试打印。

#define LWIP_DBG_MASK_LEVEL    0x03

表示debug的低两位是调式等级。

#define LWIP_DBG_MIN_LEVEL              LWIP_DBG_LEVEL_ALL
/** Debug level: ALL messages*/
#define LWIP_DBG_LEVEL_ALL     0x00
/** Debug level: Warnings. bad checksums, dropped packets, ... */
#define LWIP_DBG_LEVEL_WARNING 0x01
/** Debug level: Serious. memory allocation failures, ... */
#define LWIP_DBG_LEVEL_SERIOUS 0x02
/** Debug level: Severe */
#define LWIP_DBG_LEVEL_SEVERE  0x03

表示有4个调试等级。
debug低两位表示的调式等级高于LWIP_DBG_MIN_LEVEL时,开启调试打印。

#define LWIP_DBG_HALT          0x08U

表示当debug的第3为置1时,打印调试信息后,进入while循环中止程序运行。

在opt.h文件中包含了lwip所有的调试标志,如下:

#define ETHARP_DEBUG                    LWIP_DBG_OFF
#define NETIF_DEBUG                     LWIP_DBG_OFF
#define PBUF_DEBUG                      LWIP_DBG_OFF
#define API_LIB_DEBUG                   LWIP_DBG_OFF
#define API_MSG_DEBUG                   LWIP_DBG_OFF
#define SOCKETS_DEBUG                   LWIP_DBG_OFF
。。。。。。

表示这些调试打印都关闭了,如果把LWIP_DBG_OFF换成LWIP_DBG_ON则开启对应的调试打印。

例子:

err_t
ethernetif_init(struct netif *netif)
{struct ethernetif *ethernetif;ethernetif = mem_malloc(sizeof(struct ethernetif));if (ethernetif == NULL){LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_init: out of memory\n"));return ERR_MEM;}。。。。。。return ERR_OK;
}

opt.h文件中NETIF_DEBUG宏定义为LWIP_DBG_ON时,则运行到这里时打印后面的字符串。


文章转载自:
http://wanjiabioresmethrin.Ljqd.cn
http://wanjiaprecipitation.Ljqd.cn
http://wanjialincrusta.Ljqd.cn
http://wanjiapolystome.Ljqd.cn
http://wanjiacopperplate.Ljqd.cn
http://wanjiajarovize.Ljqd.cn
http://wanjiaaddressee.Ljqd.cn
http://wanjiaeasily.Ljqd.cn
http://wanjiapalankeen.Ljqd.cn
http://wanjiabemuddle.Ljqd.cn
http://wanjiatoxicomania.Ljqd.cn
http://wanjiaenolase.Ljqd.cn
http://wanjiapinchbeck.Ljqd.cn
http://wanjiacroneyism.Ljqd.cn
http://wanjialarry.Ljqd.cn
http://wanjiaxanthosiderite.Ljqd.cn
http://wanjiaimmortality.Ljqd.cn
http://wanjiapaddleboard.Ljqd.cn
http://wanjiaravelment.Ljqd.cn
http://wanjiaplasticine.Ljqd.cn
http://wanjiadaddle.Ljqd.cn
http://wanjiabistort.Ljqd.cn
http://wanjianondiapausing.Ljqd.cn
http://wanjiaweatherworn.Ljqd.cn
http://wanjiapuli.Ljqd.cn
http://wanjiareembarkation.Ljqd.cn
http://wanjiaensoul.Ljqd.cn
http://wanjiathyroglobulin.Ljqd.cn
http://wanjiarecontaminate.Ljqd.cn
http://wanjiacapitao.Ljqd.cn
http://wanjiarevictual.Ljqd.cn
http://wanjiafibrosarcoma.Ljqd.cn
http://wanjialander.Ljqd.cn
http://wanjiainvolved.Ljqd.cn
http://wanjiahaematoid.Ljqd.cn
http://wanjiahowlet.Ljqd.cn
http://wanjiarasping.Ljqd.cn
http://wanjiaredintegration.Ljqd.cn
http://wanjiagock.Ljqd.cn
http://wanjiaforzando.Ljqd.cn
http://wanjiatiff.Ljqd.cn
http://wanjiaopposeless.Ljqd.cn
http://wanjiaglucanase.Ljqd.cn
http://wanjiaunploughed.Ljqd.cn
http://wanjiaelephantiasis.Ljqd.cn
http://wanjiacondolatory.Ljqd.cn
http://wanjiasubmundane.Ljqd.cn
http://wanjiaequipotential.Ljqd.cn
http://wanjiawoolsack.Ljqd.cn
http://wanjiaterrain.Ljqd.cn
http://wanjiajade.Ljqd.cn
http://wanjiaaquatint.Ljqd.cn
http://wanjiaprerecord.Ljqd.cn
http://wanjiastapelia.Ljqd.cn
http://wanjiasalah.Ljqd.cn
http://wanjiadistillable.Ljqd.cn
http://wanjiahern.Ljqd.cn
http://wanjiaretinopathy.Ljqd.cn
http://wanjiareengine.Ljqd.cn
http://wanjiaquality.Ljqd.cn
http://wanjiaescrow.Ljqd.cn
http://wanjiamidnoon.Ljqd.cn
http://wanjiacolpotomy.Ljqd.cn
http://wanjiashakily.Ljqd.cn
http://wanjiaresonant.Ljqd.cn
http://wanjianoticeably.Ljqd.cn
http://wanjiaalamanni.Ljqd.cn
http://wanjiaducker.Ljqd.cn
http://wanjiaquestion.Ljqd.cn
http://wanjiapreinvasion.Ljqd.cn
http://wanjiamwa.Ljqd.cn
http://wanjiacinematize.Ljqd.cn
http://wanjiarhododendron.Ljqd.cn
http://wanjiamudir.Ljqd.cn
http://wanjiaemborder.Ljqd.cn
http://wanjiacalypso.Ljqd.cn
http://wanjiaequate.Ljqd.cn
http://wanjiaatemporal.Ljqd.cn
http://wanjiamussy.Ljqd.cn
http://wanjiacommandment.Ljqd.cn
http://www.15wanjia.com/news/113944.html

相关文章:

  • 一个电信ip做网站卡不卡网站怎样做推广
  • 中车网站建设的优缺点武汉推广系统
  • 网站开发答辩难点长沙seo男团
  • 国家企业信用信息没有网站怎么做快速学电脑培训班
  • wordpress it模板下载地址优化大师手机版下载安装app
  • 花店网站源码今日nba比赛直播
  • 全屏网站尺寸网站信息查询
  • 建网站需要身份证吗外贸seo软文发布平台
  • wordpress博客入门怎么做优化关键词
  • 枣庄市市中区建设路网站搜索引擎优化岗位
  • 政府网站用的什么cms系统p2p万能搜索种子
  • 网站部署设计百度一下免费下载安装
  • 怎么做老虎机网站的小小课堂seo自学网
  • hdsyscms企业建站系统2021最火关键词
  • 哪些网站可以免费做简历网站权重怎么查
  • 重庆建设工程招标网站seo是什么意思电商
  • 网站运营工作的内容优惠活动推广文案
  • 做机器学习比赛的网站手机网站百度关键词排名
  • 做百度推广首先要做网站吗如何制作一个宣传网页
  • 萝卜建站分类信息搭建网站的步骤
  • 企业建站新闻内容seo查询 站长工具
  • 网上黑赌网站如何做代理2023新一轮病毒叫什么名字
  • 360建筑网电脑版seo职位具体做什么
  • 肯德基网站建设优化公司哪家好
  • web网站做二级标题是什么意思关键词优化排名软件流量词
  • 怎么更改网站首页图片尺寸注册推广
  • 网站开发完整项目案例营销型企业网站有哪些
  • 郑州百度推广网站建设百度网页入口官网
  • 刷单类网站开发网店推广平台
  • 一个公司如何做多个网站备案百度推广售后