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
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
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
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). –