불행하게도 MyApp가 중지되었습니다. 이 문제를 어떻게 해결할 수 있습니까

java android debugging kotlin crash


응용 프로그램을 개발 중이며 실행할 때마다 메시지가 나타납니다.

불행히도 MyApp가 중지되었습니다.

이 문제를 해결하려면 어떻게해야합니까?


이 질문에 대해- 스택 추적이란 무엇이며, 응용 프로그램 오류를 디버깅하는 데 어떻게 사용할 수 있습니까? 자세한 내용없이 애플리케이션이 다운되었다는 내용의 질문이 많이 있습니다. 이 질문은 초보 Android 프로그래머에게 문제를 직접 해결하고 올바른 질문을하는 방법을 알려줍니다.





Answer 1 nhaarman


이 답변은 스택 추적을 검색하는 프로세스를 설명합니다. 이미 스택 추적이 있습니까? " 스택 추적이란 무엇이며 어떻게 추적하여 애플리케이션 오류를 디버깅 할 수 있습니까? "에서 스택 추적을 읽어보십시오.

문제

잡히지 않은 RuntimeException 이 발생하여 애플리케이션이 종료되었습니다.
이들 중 가장 일반적인 것은 NullPointerException 입니다.

그것을 해결하는 방법?

Android 애플리케이션이 충돌하거나 해당 문제에 대한 Java 애플리케이션이 발생할 때마다 Stack trace 이 콘솔 (이 경우 logcat)에 기록됩니다. 이 스택 추적에는 문제를 해결하기위한 중요한 정보가 포함되어 있습니다.

안드로이드 스튜디오

Finding the stack trace in Android Studio

창의 하단 막대에서 Logcat 버튼을 클릭하십시오. 또는alt+6. Devices 패널에서 에뮬레이터 또는 장치가 선택되어 있는지 확인하십시오. 그런 다음 빨간색으로 표시된 스택 추적을 찾으십시오. logcat에 많은 것들이 로그인되어있을 수 있으므로 약간 스크롤해야 할 수도 있습니다. 스택 추적을 찾는 쉬운 방법은 오른쪽 휴지통을 사용하여 로그 캣을 지우고 앱이 다시 충돌하게하는 것입니다.

스택 추적을 찾았습니다. 이제 무엇입니까?

예이! 당신은 문제를 해결하기 위해 반쯤입니다.
스택 추적을 분석하여 정확히 응용 프로그램 충돌을 일으킨 대상 만 찾으면됩니다.

" 스택 추적이란 무엇이며 어떻게 추적하여 애플리케이션 오류를 디버깅 할 수 있습니까? "에서 스택 추적을 읽어보십시오.

여전히 내 문제를 해결할 수 없습니다!

Exception 와 발생 한 줄을 발견했지만 여전히 해결 방법을 찾을 수없는 경우 주저하지 말고 StackOverflow에 질문하십시오.

가능한 한 간결하게 작성하십시오. 스택 추적 및 관련 코드를 게시하십시오 (예 : Exception 을 던진 줄까지 몇 줄).




Answer 2 Vlad Bezden


Google ADB 도구 를 사용하여 Logcat file 을 가져 와서 문제를 분석 할 수 있습니다.

adb logcat > logcat.txt

logcat.txt 파일을 열고 응용 프로그램 이름을 검색하십시오. 실패한 이유, 줄 번호, 클래스 이름 등에 대한 정보가 있어야합니다.




Answer 3 Hiren Vaghela


먼저 앱 Unfortunately, MyApp has stopped. 된 지점을 확인합니다 ( 불행히도 MyApp가 중지되었습니다. ). 이를 위해 Log.e("TAG", "Message"); 이 줄을 사용하면 logcat에서 앱 로그를 볼 수 있습니다.

그 후, 앱이 어느 지점에서 멈췄는지 알면 쉽게 해결 할 수 있습니다.




Answer 4 Rahil Ali


로그 고양이에서 오류를 확인하십시오.

일식에서 log cat 옵션을 얻습니다.

창->보기보기-> 기타-> Android-> Logcat

로그 고양이에 오류가 있습니다.

그렇지 않으면 디버그 모드에서 응용 프로그램을 실행하여 오류를 확인할 수도 있습니다. 먼저 다음을 수행하여 중단 점을 설정하십시오.

프로젝트-> 다른 이름으로 디버그-> Android 응용 프로그램을 마우스 오른쪽 버튼으로 클릭하십시오.




Answer 5 Ab_


참고 : 이 답변은 Android Studio 2.2.2를 사용하고 있습니다.

참고 2 : 장치가 성공적으로 연결되어 있다고 생각합니다.


응용 프로그램이 충돌 할 때 가장 먼저해야 할 일은 LogCat을 살펴 보는 것입니다 .Android Studio의 맨 아래에는 메뉴 목록이있는 도구 모음이 있습니다.

image

"Android 모니터"를 클릭하십시오 (위 이미지에서 밑줄이 그어진 것입니다. ^)

이제 다음과 같은 것을 얻을 수 있습니다 :

image

" Verbose "를 " Error "로 변경하십시오. 이제 기록 된 오류 만 표시됩니다. 이 모든 오류에 대해 걱정하지 마십시오.

image

확인. 이제 앱을 다운시키기 위해했던 일을하십시오. 앱이 다운되면 logcat으로 이동하십시오. at:x.x.x : 및 Caused by: TrumpIsPresidentException 이 많은 새로운 충돌 로그를 찾아야합니다. logcat의 Caused by: 문으로 이동하십시오.

image

Caused By: 옆에 발생한 예외가 있어야합니다. 필자의 경우 RuntimeException 이며 그 아래에 다음 과 같은 파란색 링크 가 포함 된 줄이 있어야합니다.

image

Caused by: 아래에 파란색 텍스트가있는 줄이 없으면 다른 Caused by: 을 찾으십시오.

파란색 링크를 클릭하십시오 . 문제가 발생한 곳으로 이동해야합니다. 제 경우에는 다음 줄로 인한 것입니다.

throw new RuntimeException();

이제 왜 충돌하는지 알고 있습니다. 내가 예외를 직접 던지고 있기 때문입니다. 이것은 명백한 오류 였다.


그러나 다른 오류가 있다고 가정 해 보겠습니다.

java.lang.NullPointerException

나는 logcat을 확인하고 그것이 나에게주는 파란색 링크를 클릭했으며 여기로 데려 갔다.

mTextView.setText(myString);

이제 디버그하고 싶습니다. 이 StackOverflow 질문 에 따르면 NullPointerException은 무언가가 null 이라고 말합니다.

null이 무엇인지 알아 봅시다. 두 가지 가능성이 있습니다. mTextView 가 null이거나 myString 이 null입니다. mTextView.setText(mString) 줄 앞에 다음 두 줄을 추가합니다.

Log.d("AppDebug","mTextView is null: " + String.valueOf(mTextView == null);
Log.d("AppDebug","myString is null: " + String.valueOf(myString== null);

이제 이전과 마찬가지로 (Verose를 Error로 변경) "Error"를 "Debug"로 변경하려고합니다. 우리는 디버깅으로 로깅하기 때문에. 모든 Log 메소드는 다음과 같습니다.

Log.
  d means Debug
  e means error
  w means warning
  v means verbose
  i means information
  wtf means "What a terrible failure". This is similar to Log.e

따라서 Log.d 를 사용 했기 때문에 디버그를 확인하고 있습니다. 이것이 우리가 디버그로 변경 한 이유입니다.

통지 Log.d 에는 "AppDebug"라는 첫 번째 매개 변수가 있습니다. logcat의 오른쪽 상단에있는 "No Filters"드롭 다운 메뉴를 클릭하십시오. "필터 구성 편집"을 선택하고 필터 이름을 지정한 다음 "로그 태그"에서 "앱 디버그"를 입력하십시오. "확인"을 클릭하십시오. 이제 logcat에 두 줄이 나타납니다.

yourPackageNameAndApp: mTextView is null: true
yourPackageNameAndApp: myString is null: false

이제 mTextView가 null이라는 것을 알았습니다.

내 코드를 관찰했는데 이제 무언가를 발견했습니다.

클래스 상단에 private TextView mTextView 선언되어 있습니다. 그러나 나는 그것을 정의하지 않습니다.

기본적으로 onCreate () 에서이 작업을 잊어 버렸습니다.

mTextView = (TextView) findViewById(R.id.textview_id_in_xml);

그래서 그것이 mTextView 가 null 인 이유는 무엇입니까? 앱에 그것이 무엇인지 알려주는 것을 잊었 기 때문입니다. 따라서 해당 줄을 추가하고 앱을 실행하면 앱이 중단되지 않습니다.