2010-02-11 9 views
5

Hej wszystkim, jestem w trakcie debugowania aplikacji C++ na Mac OS 10.5. Od czasu do czasu zrobię coś złego i spowoduję segfault lub nielegalnie. Powoduje to zawieszenie aplikacji na pewien czas, a ostatecznie dialog systemowy powiadamiający mnie o awarii. Czas oczekiwania między "zawieszeniem" a dialogiem jest znaczny; kilka minut. Jeśli spróbuję wymusić zamknięcie aplikacji lub kill -9, to z linii poleceń nic się nie dzieje. Jeśli uruchomię aplikację z debuggera (gdb), po awarii wracam do polecenia gdb i mogę zakończyć proces czysto. To nie jest idealne, ponieważ gdb jest powolny do załadowania.Debugowanie i zabijanie aplikacji na Mac OS X?

W każdym razie, możesz polecić coś? Czy istnieje sposób wyłączenia mechanizmu zgłaszania awarii w OS X?

Dzięki.

Aktualizacja 1: Oto zombie, które pozostały po wykonaniu kodu X. Podobno xcode nie może ich odpowiednio zatrzymać.

 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

Czy używasz XCode? Jeśli tak, nie powinieneś widzieć okna dialogowego Crash Reporter. Czy tworzysz aplikację opartą na interfejsie graficznym lub tylko aplikację konsolową? Edycja: nawiasem mówiąc, w przypadku korzystania z XCode, jeśli otrzymasz błąd EXEC_BAD_ACCESS podczas uruchamiania aplikacji GUI w XCode, możesz po prostu nacisnąć ikonę zatrzymania, aby natychmiast zakończyć działanie uruchomionej aplikacji. – Tom

+0

Tak, jeśli uruchomię swoje aplikacje w XCode lub gdb, wszystko działa poprawnie. Kiedy dostaję segfault, aplikacja wraca do debuggera i wszystko jest świetne. Jednak jeśli uruchomię aplikację z konsoli, będzie ona zawieszona na zawsze. – EightyEight

+0

W jaki sposób wywołujesz aplikację?Zwykle, jeśli aplikacja przestaje działać, gra się kończy, proces jest martwy. Jeśli jednak udało Ci się go wywołać z innego środowiska, być może niektóre zasoby tego procesu są otwarte i nie można ich jeszcze odpuścić, a Ty czekasz, aż proces nadrzędny zrobi coś najpierw (i może mieć problem z wykryciem czegoś, co poszło nie tak). –

Odpowiedz

1

Tam jest CrashReporterPrefs app że pochodzi z Xcode (poszukaj go z Spotlight; powinny być w /Developer/Applications/Utilities). Może to być ustawienie w Tryb serwera, aby wyłączyć okno dialogowe "Nieoczekiwane zamknięcie".

Oto another suggestion:

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

Aby ponownie włączyć, wykonaj następujące czynności:

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

może się zdarzyć, że aplikacja jest dumping dużego pliku core - chcesz zapewne zauważy efekt na dostępnym miejscu na dysku. Można wyłączyć rdzeń dumping użyciu

sudo sysctl -w kern.coredump=0 

Uaktywnij ustawiając =1.

+0

Tak, próbowałem już tego. Okno dialogowe nie jest już wyskakujące, ale nadal występuje opóźnienie. – EightyEight

+0

Nie poleciłbym podejścia "chmod". Modyfikowanie plików systemowych lub uprawnień powoduje problemy. Aplikacja Prefs zrobi to, o co poprosisz. – gavinb

+0

@gavinb - uzgodniony; zmieniono sugestie. –

1

This article z osxdaily.com mówi wystarczy wpisać:

defaults write com.apple.CrashReporter DialogType none

w terminalu. Nie wiem, czy to naprawi opóźnienie.

1

W końcu to rozgryzłem.

w/System/Library/CoreServices:

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

To musiało być z moich wcześniejszych prób, aby wyłączyć okienko zgłoszenia denerwujące. Żyj i ucz się. :]