【发布时间】:2017-03-28 22:38:44
【问题描述】:
我正在尝试实现一个 websocket 客户端(在 C 中使用 libwebsockets)。我正在使用 cmake 来控制软件编译过程。
我的问题很简单:如何使用 Libwebsockets 启用调试日志记录?
首先我像文档中所说的那样编译并安装了 libwebsockets 关于构建 lws 的注意事项:
使用调试信息和 _DEBUG 构建低优先级调试消息 编译进去,使用
$ cmake .. -DCMAKE_BUILD_TYPE=DEBUG
来自 Libwebsockets 2.1 doc 关于使用 lws 编码的注意事项 (https://libwebsockets.org/lws-api-doc-master/html/md_README.coding.html) :
调试日志
您还可以使用 lws_set_log_level api 提供自定义回调 实际上发出日志字符串。默认情况下,这指向一个内部 发出发送到 stderr 的函数。将其设置为 NULL 使其保持原样 而是。
帮助函数 lwsl_emit_syslog() 从库中导出到 简化到 syslog 的日志记录。你仍然需要使用setlogmask,openlog 并关闭您的用户代码。
日志 API 可用于用户代码。
lwsl_err(...) lwsl_warn(...) lwsl_notice(...) lwsl_info(...) lwsl_debug(...) notice 和 info 的区别在于,notice 默认会被记录,而 info 默认会被忽略。
如果你没有定义_DEBUG,即没有这个
$ cmake .. -DCMAKE_BUILD_TYPE=DEBUG 然后日志级别低于通知 实际上并没有被编译进去。
就像this (official) example 一样,我把lws_set_log_level(10, NULL); 放在我的websocket 主函数的开头。
CMakeLists.txt:
cmake_minimum_required(VERSION 3.6)
project(foo)
set(CMAKE_C_STANDARD 11)
set(CMAKE_BUILD_TYPE DEBUG) #For CLion IDE but i'm pretty sur it does nothing.
set(SOURCE_FILES
websocket.c
websocket.h
main.c)
add_executable(foo ${SOURCE_FILES})
target_link_libraries(foo websockets)
然后我运行 cmake :
cmake .. -DCMAKE_BUILD_TYPE=DEBUG
make
一切正常,我的 websocket 客户端似乎没问题。
但我没有调试日志...我错过了什么?
【问题讨论】:
标签: c debugging cmake libwebsockets