4

供您参考(因为我在下面提到了库函数),libwebsockets 文档可以在这里找到:https ://github.com/warmcat/libwebsockets/blob/master/libwebsockets-api-doc.html#L466

站点可以在这里找到:http: //libwebsockets.org/trac/libwebsockets

我的问题是,如果我为 libwebsocket_client_connect() 函数的 ssl_connection 参数传入 1 或 2,则会出现段错误。

我的代码是用 C++ 编写的。

想知道它发生在哪里,我在 gdb 中运行了我的代码(在添加了 -g 标志之后)。在段错误之后,我运行回溯。这就是我得到的:

来自 /lib/x86_64-linux-gnu/libssl.so.1.0.0 (gdb) 回溯的 SSL_ctrl () 中的 0x00007ffff7748c43

0 0x00007ffff7748c43 in SSL_ctrl () from /lib/x86_64-linux-gnu/libssl.so.1.0.0

1 0x00007ffff7503aa2 在来自 /usr/local/lib/libwebsockets.so.5.0.0 的 lws_client_socket_service ()

2 0x00007ffff74fe606 in libwebsocket_service_fd () from /usr/local/lib/libwebsockets.so.5.0.0

3 0x00007ffff7504029 在来自 /usr/local/lib/libwebsockets.so.5.0.0 的 libwebsocket_client_connect_2 ()

4 0x00007ffff75037d5 在来自 /usr/local/lib/libwebsockets.so.5.0.0 的 lws_client_socket_service ()

5 0x00007ffff74fe606 in libwebsocket_service_fd () from /usr/local/lib/libwebsockets.so.5.0.0

6 0x00007ffff7505980 在来自 /usr/local/lib/libwebsockets.so.5.0.0 的 lws_plat_service ()

还有更多,但相关信息在上面......

如上所示,segfault 发生在 SSL_ctrl() 函数中。

如果有人从 libwebsockets SSL_ctrl() 函数中得到了段错误并解决了它,请告诉我。

如果有人能告诉我如何使用调试标志构建 libwebsockets(使用 make、cmake 或其他方式)和/或使其详细地写入某些日志文件和/或使其能够使用 gdb 进入函数,我将不胜感激!

4

1 回答 1

1

要使用 DEBUG 选项构建 libwebsockets,请将 -DCMAKE_BUILD_TYPE=DEBUG 参数与 Cmake 一起使用。

请确保删除所有早期版本的 libwebsockets.h(在没有 -DCMAKE_BUILD_TYPE=DEBUG 选项的情况下构建)并在启用 -DCMAKE_BUILD_TYPE=DEBUG 参数的情况下进行干净构建。

在此之后启用调试同时执行使用 -d 选项设置为日志级别

如果我的可执行文件是 sock,则在运行时启用调试日志使用 ./sock 127.0.0.1 -p 9000 -d 65535

这将给出类似的输出

    [1449754712:6654] CLIENT: lws_client_connect: direct conn
    [1449754712:6654] CLIENT: lws_client_connect_2
    [1449754712:6654] CLIENT: lws_client_connect_2: address 127.0.0.1
    Reason :35
    Reason :32
    Reason :36
    [1449754712:6655] CLIENT: nonblocking connect retry
于 2015-12-10T13:59:31.833 回答