我正在尝试实现一个 websocket 客户端(在 C 中使用 libwebsockets)。我正在使用 cmake 来控制软件编译过程。
我的问题很简单:如何使用 Libwebsockets 启用调试日志记录?
首先,我编译并安装了 libwebsockets,就像它在关于构建 lws 的文档注释中所说的那样:
要为编译的低优先级调试消息使用调试信息和 _DEBUG 进行构建,请使用
$ cmake .. -DCMAKE_BUILD_TYPE=DEBUG
来自Libwebsockets 2.1 doc Notes about encoding with lws ( https://libwebsockets.org/lws-api-doc-master/html/md_README.coding.html ):
调试日志
同样使用 lws_set_log_level api,您可以提供自定义回调来实际发出日志字符串。默认情况下, this 指向一个发送到 stderr 的内部 emit 函数。将其设置为 NULL 会使其保持原样。
帮助函数 lwsl_emit_syslog() 从库中导出以简化日志记录到 syslog。您仍然需要在用户代码中使用 setlogmask、openlog 和 closelog。
日志记录 API 可用于用户代码。
lwsl_err(...) lwsl_warn(...) lwsl_notice(...) lwsl_info(...) lwsl_debug(...) notice 和 info 的区别在于默认情况下会记录notice,而默认情况下会忽略info .
如果您没有使用定义的 _DEBUG 构建,即没有这个
$ cmake .. -DCMAKE_BUILD_TYPE=DEBUG 然后日志级别低于通知实际上并没有被编译。
就像在这个(官方)示例中一样,我把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 客户端似乎还可以。
但我没有调试日志......我错过了什么?