2009-12-11 15 views
1

J'utilise Debian x64 2.6.26 pour héberger une application serveur que nous avons écrite en C++. Parfois, GDB est activé seul et utilise 100% du temps processeur, ce qui ne laisse aucune place aux autres processus. La version GDB est 6.8-debian. Je ne sais pas pourquoi cela arrive et comment puis-je empêcher cela. Il semble que cela n'arrive que lorsque l'application serveur est en cours d'exécution. J'ai besoin de savoir comment arrêter cela ou s'il y a quelque chose qui ne va pas dans notre application, comment puis-je le trouver. Toute aide est très appréciée.GDB est activé automatiquement et a 100% d'activité CPU

Merci

+1

Peut-être que cela appartient à SuperUser.com? Semble plus de systèmes que de programmation liés. Là encore, gdb est tellement lié à la programmation que je ne peux pas le dire. –

+1

Il semble que quelque chose ne va pas avec nos options de compilation ou quelque chose ne va pas avec notre code mais je ne peux pas dire lequel. Donc, ce n'est pas lié à superuser.com –

+0

GDB démarre automatiquement n'est pas quelque chose que j'ai entendu parler. Est-ce quelque chose que l'application fait exprès? –

Répondre

3

Je suis enclin à croire que GDB est s'appelé par un gestionnaire de signaux dans un code. Un autre suspect est un démon de surveillance du système comme 'monit'. Quand il y a un processus malveillant mangeant trop de mémoire ou de CPU, il peut essayer de faire un backtrace ou un vidage en utilisant GDB. Sur le chemin du dépannage est d'utiliser 'lsof' sur le processus GDB et voir quels fichiers sont ouverts par GDB et voir si cela vous donne une idée. En utilisant 'ps -ef -o cmd, pid, ppid | grep -i gdb ', vous pouvez comprendre comment GDB a été lancé et s'il vous donne le PID du processus joint, vous saurez quel processus est inspecté. Une approche de marteau de frappeur pour tronquer une telle exécution automatique remplace "GDB" avec un tronçon "GDB" qui ne fait rien. La non existence de GDB pourrait signaler une erreur si. J'ai fait des trucs si sales quand je n'ai pas eu le temps d'approfondir le problème. Dans le GDB stub, vous pouvez enregistrer tous les arguments de la ligne de commande et le nom du processus appelant.

Un stub exemple dans 'C':

#include <stdio.h> 

int 
main(int argc, char *argv[]) { 
    size_t sz; 
    FILE *fp = 0; 
    fp = fopen("/tmp/gdbstub.log", "a"); 
    if (fp) { 
     fprintf(fp, "\n%s invoked:", argv[0]); 
     for (sz = 0; sz < argc - 1; sz++) { 
      fprintf(fp, "%s ", argv[sz]); 
     } 
     fclose(fp); 
    } 
    return 0; 
} 
Questions connexes