2010-02-11 5 views
5

Salut à tous, je suis en train de déboguer une application C++ sur Mac OS 10.5. De temps en temps, je vais faire quelque chose de mal et provoquer une erreur de segmentation ou une opération par ailleurs illégale. Cela entraîne l'application suspendue pendant un certain temps, et éventuellement une boîte de dialogue système me notifiant de l'accident. Le temps d'attente entre le "hang" et le dialogue est significatif; quelques minutes. Si j'essaye de forcer à quitter l'application ou kill -9 il ne se passe rien de la ligne de commande. Si je démarre l'application à partir du débogueur (gdb), lors d'un plantage, je reviens à l'invite de gdb et peut quitter le processus proprement. Ce n'est pas idéal, car gdb est lent à charger.Déboguer et tuer des applications sur Mac OS X?

De toute façon, pouvez-vous recommander quelque chose? Est-il possible de désactiver le mécanisme de génération de rapports sur les incidents dans OS X?

Merci.

Mise à jour 1: Voici les zombies qui restent d'une exécution XCode. Apparemment, xcode ne peut pas les arrêter correctement non plus.

 1 [email protected]:~$ ps auxw|grep -i Reader 
    2 eightieight 28639 0.0 0.0 599828 504 s004 R+ 2:54pm 0:00.00 grep -i reader 
    3 eightieight 28288 0.0 1.1 1049324 45032 ?? UEs 2:46pm 0:00.89 /Users/eightieight/workspace/spark/spark/reader/browser/build/Debug/Reader.app/Contents/MacOS/Reader 
    4 eightieight 28271 0.0 1.1 1049324 45036 ?? UEs 2:45pm 0:00.89 /Users/eightieight/workspace/spark/spark/reader/browser/build/Debug/Reader.app/Contents/MacOS/Reader 
    5 eightieight 28146 0.0 1.1 1049324 44996 ?? UEs 2:39pm 0:00.90 /Users/eightieight/workspace/spark/spark/reader/browser/build/Debug/Reader.app/Contents/MacOS/Reader 
    6 eightieight 27421 0.0 1.1 1049328 45024 ?? UEs 2:29pm 0:00.88 /Users/eightieight/workspace/spark/spark/reader/browser/build/Debug/Reader.app/Contents/MacOS/Reader 
    7 eightieight 27398 0.0 1.1 1049324 45044 ?? UEs 2:28pm 0:00.90 /Users/eightieight/workspace/spark/spark/reader/browser/build/Debug/Reader.app/Contents/MacOS/Reader 
+0

Utilisez-vous XCode? Si c'est le cas, vous ne devriez pas voir la boîte de dialogue Crash Reporter. En outre, construisez-vous une application basée sur une interface graphique ou simplement une application console? Edit: Incidemment, dans le cas où vous utilisez XCode, si vous obtenez une erreur EXEC_BAD_ACCESS lors de l'exécution d'une application graphique en XCode, vous pouvez simplement appuyer sur l'icône d'arrêt pour terminer immédiatement l'application en cours d'exécution. – Tom

+0

Oui, si je cours mes applications dans XCode ou gdb, tout fonctionne correctement. Quand je reçois un segfault, l'application revient dans le débogueur et tout est génial. Cependant, si je lance l'application depuis la console, elle semble être suspendue pour toujours. – EightyEight

+0

Comment invoquez-vous l'application?En règle générale, si une application tombe en panne, jeu terminé, le processus est mort. Cependant, si vous avez réussi à l'invoquer à partir d'un autre environnement, peut-être que certaines ressources de ce processus sont maintenues ouvertes et ne peuvent pas être abandonnées et vous attendez que le processus parent fasse quelque chose en premier (et il peut avoir le problème en détectant quelque chose a mal tourné). –

Répondre

1

Il y a le CrashReporterPrefs app qui vient avec XCode (recherche avec Spotlight, devrait être en /Developer/Applications/Utilities). Cela peut être configuré en mode serveur pour désactiver la boîte de dialogue 'Quitter de manière inattendue' de l'application.

est ici another suggestion:

sudo chmod 000 /System/Library/CoreServices/Problem\ Reporter.app 

Pour réactiver, procédez comme suit:

sudo chmod 755 /System/Library/CoreServices/Problem\ Reporter.app 

Il se pourrait que l'application est le dumping un gros fichier de base - vous auriez probablement remarqué l'effet sur l'espace disque disponible cependant. Vous pouvez désactiver le dumping noyau à l'aide

sudo sysctl -w kern.coredump=0 

Réactiver en mettant =1.

+0

Oui, j'ai déjà essayé. La boîte de dialogue ne fait plus de popups mais il y a toujours le délai. – EightyEight

+0

Je ne conseillerais pas l'approche 'chmod'. La modification des fichiers système ou des autorisations demande des problèmes. L'application Prefs fera ce que vous demandez. – gavinb

+0

@gavinb - accepté; suggestions réorganisées. –

1

This article de osxdaily.com vous dit il suffit de taper:

defaults write com.apple.CrashReporter DialogType none

dans le terminal. Je ne sais pas si cela va régler le problème.

1

J'ai finalement compris.

dans/System/Library/CoreServices:

 
---------- 1 root wheel 56752 11 Aug 2009 ReportPanic 

Cela a dû être de mes tentatives antérieures pour désactiver la boîte de dialogue du rapport ennuyeux. Vis et apprend. :]