2017-08-01 2 views
1

Je lis Apache code source httpd, je voudrais savoir quand une demande arrive, quelle fonction est appelée en premier, suivie de quelle fonction, et ainsi de suite, y at-il un moyen facile de le faire?Comment imprimer une séquence d'appel de fonctions dans c?

Quelque chose comme

Waiting client connection... # a client send a HTTP request 
client.c:accept_request() is called 
client.c:handle_request() is called 
asdf.c:func1() is called 
fdsa.c:func2() is called 
response.c:send_response() is called 
Waiting client connection... 
+0

ehh? Est-ce pas le code C? (vous avez marqué ainsi), et AFAIK, C est orienté processus ... –

+0

S'il vous plaît clarifier: Voulez-vous imprimer la pile d'appels au moment de l'exécution? Ce n'est pas possible dans la norme C. –

+0

Pour Linux, il y a ['backtrace()'] (http://man7.org/linux/man-pages/man3/backtrace.3.html) .. compiler avec débogage symboles pour une sortie significative. –

Répondre

1

Mettez une déclaration printf au début de chaque fonction

printf("Called function: %s\n", __func__); 

Cela affichera le nom de la fonction lorsque cette fonction est appelée et de cette façon vous serez en mesure de connaître la séquence d'appel de fonction.

+0

Il y a tellement de fonctions ... – Sato

+0

C'est la seule façon difficile. – haccks

1

Pas un facile façon non, mais il y a plusieurs possibilités:

  • si vous pouvez exécuter le code passe ensuite à travers avec un débogueur ou un profileur peut vous aider à voir ce qui se passe
  • à nouveau si vous pouvez exécuter le code que vous pouvez ajouter des traces pour comprendre le flux des fonctions
printf(">>> entering %s\n", __func__); 
printf("<<< leaving %s\n", __func__); 
  • si vous ne pouvez pas exécuter le code alors peut-être des outils comme ctags ou cscope peut aider votre voir quelles fonctions sont appelées lorsque (ou un IDE comme Eclipse ou IntelliJ)