手把手教你为 Mbed TLS 打开“显微镜”——调试日志完整攻略

目录

引言

三步开启调试

在编译阶段把调试代码编进去

设置“日志过滤级别”

注册打印回调

常见“踩坑”提醒

结束语


引言

在调试星闪WS63开发板的程序使,使用Mbed TLS(mbedtls-3.1)时,握手失败、证书校验错误、内存泄漏 等异常往往没有任何提示,只能干瞪眼。
官方在 library/debug.c 里已经预留了一套完整的调试钩子,只要“拧松”两个开关就能让内部细节像流水账一样吐出来。

三步开启调试

在编译阶段把调试代码编进去

修改open_source\mbedtls\mbedtls_v3.1.0\harden\build\conncet\mbedtls.cmake文件,在其中加上MBEDTLS_DEBUG_C宏。

设置“日志过滤级别”

需要再程序中设置过滤级别,数字越大日志越详细:

级别内容
0静默,完全不出(默认)
1错误
2状态改变
3基本信息
4更多细节

下面是示例:

#include "mbedtls/debug.h"
mbedtls_debug_set_threshold(4);   

注册打印回调

mbedtls_ssl_conf_dbg 是 Mbed TLS 用来注册“SSL/TLS 调试日志回调函数”的唯一接口。
一句话概括:只要想让 mbedtls/debug.c 里的调试语句真正“落地”到串口/文件/日志系统,就必须在配置阶段调用它。

void mbedtls_ssl_conf_dbg(mbedtls_ssl_config *conf,
                          void (*f_dbg)(void *, int, const char *, int, const char *),
                          void *p_dbg);
参数含义
conf指向已初始化的 mbedtls_ssl_config 结构体。
f_dbg应用层自己写的调试回调函数;若为 NULL 则关闭日志。
p_dbg透传到回调的第一个形参 ctx,在星闪SDK中填写NULL即可。
static void my_debug(void *ctx,       /* = p_dbg */
                     int  level,      /* 调试级别 0-4 */
                     const char *file,/* 源文件路径 */
                     int  line,       /* 行号 */
                     const char *str) /* 日志内容 */
{
    /* 这里可以自由发挥:打印时间戳、过滤级别、输出到 RTT/UART 等 */
    (void)ctx;
    printf("[TLS:%d] %s:%04d: %s", level, file, line, str);
}

后续正常 mbedtls_ssl_setup 即可;所有握手、证书、加解密细节都会走到 my_debug

常见“踩坑”提醒

症状原因解决
编译后毫无日志没开 MBEDTLS_DEBUG_C检查宏定义
只有 library/debug.c 里几行debug_threshold 太低mbedtls_debug_set_threshold(4)
日志太多刷屏级别太高降到 2 或 3

结束语

调试信息一开,Mbed TLS 就不再是黑盒。
如果本文帮到了你,欢迎点个赞、收个藏,评论区一起交流踩过的坑!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神一样的老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值