c++ - ¿Cómo puedo compilar libwebsockets con depuración(es decir,-g para poder usar gdb)?(Recibo segfault en la función libwebsockets, ssl_ctrl())
segmentation-fault (1)
Para su referencia (porque menciono las funciones de la biblioteca a continuación), la documentación de libwebsockets se puede encontrar aquí: https://github.com/warmcat/libwebsockets/blob/master/libwebsockets-api-doc.html#L466
El sitio se puede encontrar aquí: http://libwebsockets.org/trac/libwebsockets
Mi problema es que si paso en 1 o 2 para el parámetro ssl_connection de la función libwebsocket_client_connect () obtengo una segfault.
Mi código está escrito en c ++.
Queriendo saber dónde está pasando, ejecuté mi código en gdb (después de haber agregado la bandera -g). Después de segfault, ejecuté backtrace. Esto es lo que conseguí:
0x00007ffff7748c43 en SSL_ctrl () desde /lib/x86_64-linux-gnu/libssl.so.1.0.0 (gdb) backtrace
0 0x00007ffff7748c43 en SSL_ctrl () de /lib/x86_64-linux-gnu/libssl.so.1.0.0
1 0x00007ffff7503aa2 en lws_client_socket_service () de /usr/local/lib/libwebsockets.so.5.0.0
2 0x00007ffff74fe606 en libwebsocket_service_fd () de /usr/local/lib/libwebsockets.so.5.0.0
3 0x00007ffff7504029 en libwebsocket_client_connect_2 () de /usr/local/lib/libwebsockets.so.5.0.0
4 0x00007ffff75037d5 en lws_client_socket_service () de /usr/local/lib/libwebsockets.so.5.0.0
5 0x00007ffff74fe606 en libwebsocket_service_fd () de /usr/local/lib/libwebsockets.so.5.0.0
6 0x00007ffff7505980 en lws_plat_service () de /usr/local/lib/libwebsockets.so.5.0.0
Hay más, pero la información pertinente está arriba ...
Como se puede ver arriba, la segfault ocurre en la función SSL_ctrl ().
Si alguien ha obtenido una segfault de la función libwebsockets SSL_ctrl () y la ha resuelto, por favor avíseme.
Si alguien me puede decir cómo construir libwebsockets (usando make, cmake, u otro) con los indicadores de depuración y / o hacerlo de manera que se escriba de forma verdosa en algún archivo de registro y / o hacerlo para que pueda acceder a las funciones con gdb, ¡Se lo agradecería mucho!
Para compilar libwebsockets con opciones DEBUG, use -DCMAKE_BUILD_TYPE = argumento DEBUG con Cmake.
Asegúrese de que todas las versiones anteriores de libwebsockets.h (que se compilaron sin la opción -DCMAKE_BUILD_TYPE = DEBUG) se hayan eliminado y realice una compilación limpia con el argumento -DCMAKE_BUILD_TYPE = DEBUG habilitado.
Después de esto para habilitar la depuración durante la ejecución, use la opción -d establecida en el nivel de registro
si mi ejecutable es un calcetín, entonces habilite el registro de depuración mientras se ejecuta use ./sock 127.0.0.1 -p 9000 -d 65535
que dará salida como
[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