2014-01-11 2 views
2

일부 하드웨어 문제가 발생하고 kivy 앱이 다운되면 문제가 있습니다. 예 : Android 또는 iOS. 일반 사용자는 로그를 볼 수 없으며 아무 것도 볼 수 없습니다.kivy-client 크래시 로그를 어떻게 내 서버에 보낼 수 있습니까?

내 응용 프로그램이 시작되면 별도의 프로세스를 만들고 어떻게 든 주 응용 프로그램의 상태를보고 싶습니다. 충돌이 발생한 경우 서버에 오류 로그를 보내고 싶습니다. 그래서, 이것을하는 가장 좋은 방법은 무엇입니까? 아마도 다른 프로세스가 중복되어 더 간단한 방법으로 만들 수 있습니까? 그리고 정확히 어떻게 충돌 로그를 잡을 수 있습니까? ... 감사합니다!

+0

아마 atexit을 사용할 수 있습니다 : https : //docs.python.org/2.7/library/atexit.html? highlight = atexit # module-atexit – Duikboot

답변

2

TLDR : 사용 Sentry

다른 충돌의 종류 및 도구의 종류-의 다른있다.

네이티브 크래시 : 일반적으로 segfault, 실제로는 아무것도 할 수없는 저수준 크래시입니다. Play 스토어 탭에서 기본 충돌/예술을 볼 수 있습니다. 파이썬 인터프리터와 다른 모든 스레드의 C 트레이스를 보게 될 것이기 때문에, 어떤 추적도 당신에게 말할 것이 없습니다. 사용자는 "갑자기 종료 된 응용 프로그램 XXX"또는 그와 비슷한 것을 볼 수 있습니다. 네이티브 크래시 발생시 더 멋진 메시지를 표시하고 다른 곳으로 보낼 수있는 도구가 있지만 응용 프로그램은 복구되지 않습니다. 이러한 도구로 수행 할 수있는 유일한 작업은 다시 시작하는 것입니다.

파이썬 충돌 : 좋은 소식, 당신은 그들을 잡을 수 있고 이해하기 쉬운 추적을 할 수 있습니다. 나는 당신이 Sentry을 들여다 볼 것을 제안합니다. 그것은 opensource이고, 서버에 센트리를 설치할 수 있으며, 앱에 문제가 발생하면 센트리 설치로 전체 추적을 보낼 수 있습니다. 굉장히 유용하다.

Kivy에 통합도 매우 간단하다 :

if __name__ == "__main__": 
    import traceback 
    from raven import Client 
    client = Client('requests+http://[email protected]/sentry/1') 
    try: 
     YourApp().run() 
    except: 
     traceback.print_exc() 
     ident = client.get_ident(client.captureException()) 
     print "Exception caught; reference is %s" % ident 

안드로이드에서 인터넷 권한이하는 것을 잊지 마십시오. 인터넷이 없으면 콘솔에서 두 번 실패합니다. 하지만 그게 전부입니다.

또한 Kivy의 ExceptionManager에 연결할 수도 있습니다. 예외가 메인 루프에서 발생한다면, 당신은 그것을 잡을 수 있고 앱을 종료하지 않을 수 있습니다 (예외는 무시하십시오). 중요한 것을하고 있는지 조심하십시오 : D

관련 문제