2017-03-01 4 views
1

J'essaie d'implémenter un client websocket (avec libwebsockets en C). J'utilise cmake pour contrôler le processus de compilation du logiciel.Comment activer la journalisation de débogage avec Libwebsockets?

Ma question est simple: Comment activer la journalisation de débogage avec Libwebsockets?

D'abord je compilé et installé libwebsockets comme il dit dans la documentation Remarques sur la construction lws:

construire avec les informations de débogage et _DEBUG pour les messages de débogage moins prioritaires compilé, utilisez

$ cmake .. -DCMAKE_BUILD_TYPE = DEBUG

De Libwebsock 2.1 ets doc Remarques sur le codage avec lws (https://libwebsockets.org/lws-api-doc-master/html/md_README.coding.html):

Enregistrement de débogage

utilisant également api lws_set_log_level vous pouvez fournir un rappel personnalisé pour émettre effectivement la chaîne de journal. Par défaut, cela indique une fonction d'émission interne qui envoie à stderr. Le mettre à NULL le laisse comme est à la place.

Une fonction d'assistance lwsl_emit_syslog() est exportée de la bibliothèque vers pour simplifier la consignation dans syslog. Vous devez toujours utiliser setlogmask, openlog et closelog dans votre code utilisateur.

Les API de journalisation sont disponibles pour le code utilisateur.

lwsl_err (...) lwsl_warn (...) lwsl_notice (...) lwsl_info (...) lwsl_debug (...) La différence entre avis et information est cet avis sera enregistré par défaut alors que info est ignorée par défaut.

Si vous n'êtes pas la construction avec _DEBUG défini, par exemple, sans que cela

$ cmake .. -DCMAKE_BUILD_TYPE = DEBUG puis connectez-vous ci-dessous les niveaux avis ne se fait pas compilé.

Comme dans this (official) example, je mets lws_set_log_level(10, NULL); au début de ma fonction principale 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) 

Puis-je exécuter CMake:

cmake .. -DCMAKE_BUILD_TYPE=DEBUG 
make 

Tout fonctionne très bien, mon client websocket semble ok.

Mais je n'ai pas de journaux de débogage ... Que manque-t-il?

Répondre

1

Tks au lws équipe sur Github:

Le type de construction de DEBUG arrête types d'exploitation plus verbeuses d'être enlevé lors de la construction.

Vous avez encore besoin pour leur permettre à l'exécution en utilisant un bitmap dans lws_set_log_level() ... la valeur par défaut est 7 (err/warn/avis)

J'ai mal lu libwebsockets.h:

enum lws_log_levels { 
    LLL_ERR = 1 << 0, 
    LLL_WARN = 1 << 1, 
    LLL_NOTICE = 1 << 2, 
    LLL_INFO = 1 << 3, 
    LLL_DEBUG = 1 << 4, 
    LLL_PARSER = 1 << 5, 
    LLL_HEADER = 1 << 6, 
    LLL_EXT = 1 << 7, 
    LLL_CLIENT = 1 << 8, 
    LLL_LATENCY = 1 << 9, 
    LLL_USER = 1 << 10, 

    LLL_COUNT = 11 /* set to count of valid flags */ 
}; 

Comme Andy dit, la valeur par défaut est , donc 7 ...