น่าเสียดายที่ MyApp หยุดทำงาน ฉันจะแก้ปัญหานี้ได้อย่างไร


785

ฉันกำลังพัฒนาแอปพลิเคชันและทุกครั้งที่เปิดใช้งานฉันจะได้รับข้อความ:

น่าเสียดาย MyApp หยุดลง

ฉันจะแก้ไขปัญหานี้ได้อย่างไร


เกี่ยวกับคำถามนี้ - เห็นได้ชัดว่าได้รับแรงบันดาลใจจากการติดตามสแต็กคืออะไรและฉันจะใช้เพื่อแก้ไขข้อผิดพลาดแอปพลิเคชันของฉันได้อย่างไร มีคำถามมากมายที่ระบุว่าแอปพลิเคชันของพวกเขาหยุดทำงานโดยไม่มีรายละเอียดเพิ่มเติม คำถามนี้มีวัตถุประสงค์เพื่อสอนให้โปรแกรมเมอร์ Android มือใหม่เกี่ยวกับวิธีการลองและแก้ไขปัญหาด้วยตนเองหรือถามคำถามที่เหมาะสม


22
ฉันเคยเห็นคำถามมากมายที่ปิดตัวลงด้วยการทำสิ่งนี้ นี่เป็นข้อมูลอ้างอิงที่ดีสำหรับการช่วยเหลือผู้คนโพสต์ข้อมูลที่เกี่ยวข้องในคำถามของพวกเขา อย่างไรก็ตามนี่ไม่ใช่สิ่งที่ซ้ำกันของปัญหารากที่นั่น แต่เป็นเพียงวิธีการในการขุดปัญหาราก ฉันคิดว่ามันจะดีกว่าเพียงแค่ให้ลิงก์ไปยังคำถามนี้เพื่อเป็นข้อมูลอ้างอิงและไม่ได้ปิดเหมือนกัน
laalto

33
ฉันคิดว่าฟังก์ชั่นปิดสมบูรณ์แบบสำหรับสิ่งนี้ คำถามเหล่านี้ส่วนใหญ่แสดงความรู้เพียงเล็กน้อยเกี่ยวกับทักษะการดีบักขั้นพื้นฐาน การพักไว้จะเป็นการเปิดโอกาสให้พวกเขาชี้แจงปัญหาโดยใช้วิธีการตามที่ระบุไว้ในคำตอบ ยังดีกว่าพวกเขาอาจสามารถแก้ปัญหาด้วยตนเองได้ การสนทนานี้อาจเหมาะกว่าสำหรับ meta.stackoverflow.com
nhaarman

คำถามนี้คลุมเครือเกินไป คำถามที่ดีกว่าคือ 'ใช้ [myIDE] ฉันจะแก้ไขข้อผิดพลาด' แอปพลิเคชัน Android ที่แสดงข้อผิดพลาด 'ได้อย่างไร MyApp หยุดทำงาน'
Chris Halcrow

7
@ChrisHalcrow Q / A นี้ไม่ได้เกี่ยวกับการแก้จุดบกพร่องเลย มันเกี่ยวกับการชี้นำผู้เริ่มต้นใน Android วิธีจัดการกับแอปขัดข้อง
nhaarman

stackoverflow.com/questions/26609734/… .. เปิดใช้งานข้อผิดพลาด multidex becoz ในการแปลงเป็น apk
RejoylinLokeshwaran

คำตอบ:


717

คำตอบนี้อธิบายกระบวนการในการดึงข้อมูลการติดตามสแต็ก มีการติดตามสแต็กอยู่แล้ว? อ่านข้อมูลเพิ่มเติมเกี่ยวกับการติดตามสแต็กใน " การติดตามสแต็กคืออะไรและฉันจะใช้เพื่อแก้ไขข้อผิดพลาดแอปพลิเคชันของฉันได้อย่างไร "

ปัญหา

แอปพลิเคชันของคุณเลิกเนื่องจากไม่RuntimeExceptionได้รับการติดต่อ ที่พบมากที่สุดของเหล่านี้เป็น
NullPointerException

วิธีแก้ปัญหา

ทุกครั้งที่แอปพลิเคชัน Android ขัดข้อง (หรือแอปพลิเคชัน Java สำหรับเรื่องนั้น) a Stack traceจะถูกเขียนไปยังคอนโซล (ในกรณีนี้คือ logcat) การติดตามสแต็กนี้มีข้อมูลที่สำคัญสำหรับการแก้ปัญหาของคุณ

Android Studio

การค้นหาการติดตามสแต็กใน Android Studio

ในแถบด้านล่างของหน้าต่างให้คลิกที่Logcatปุ่ม หรือคุณสามารถกด+alt 6ตรวจสอบให้แน่ใจว่าอิมูเลเตอร์หรืออุปกรณ์ของคุณถูกเลือกในDevicesพาเนล จากนั้นลองค้นหาการติดตามสแต็กซึ่งแสดงเป็นสีแดง อาจมีหลายสิ่งที่ล็อกอินเข้าสู่ logcat ดังนั้นคุณอาจต้องเลื่อนไปสักหน่อย วิธีง่ายๆในการค้นหาการติดตามสแต็กคือการล้าง logcat (โดยใช้ถังรีไซเคิลทางด้านขวา) และปล่อยให้แอปหยุดทำงานอีกครั้ง

ฉันได้พบการติดตามสแต็กตอนนี้อะไร

เย้! คุณกำลังแก้ไขปัญหาของคุณได้ครึ่งทาง
คุณจะต้องค้นหาว่าอะไรทำให้แอพพลิเคชั่นของคุณพังโดยการวิเคราะห์ stack trace

อ่านข้อมูลเพิ่มเติมเกี่ยวกับการติดตามสแต็กใน " การติดตามสแต็กคืออะไรและฉันจะใช้เพื่อแก้ไขข้อผิดพลาดแอปพลิเคชันของฉันได้อย่างไร "

ฉันยังไม่สามารถแก้ปัญหาของฉันได้!

หากคุณพบExceptionบรรทัดที่เกิดขึ้นและยังไม่สามารถหาวิธีแก้ไขได้อย่าลังเลที่จะถามคำถามเกี่ยวกับ StackOverflow

พยายามรัดกุมที่สุด: โพสต์สแต็กติดตามและรหัสที่เกี่ยวข้อง (เช่นสองสามบรรทัดจนถึงบรรทัดที่ขว้างException)


33
ฉันรู้ว่าโพสต์นี้เก่า: แต่ถ้าคุณใช้ IntelliJ IDEA คุณสามารถเข้าไปข้างในAndroid > Devices|Logcatและเพิ่มตัวกรองใหม่ ( i.imgur.com/145dtkx.png ) และกรองby Log Messageที่นี่คุณสามารถใส่FATAL EXCEPTION( i.imgur.com/HpELhaU .png ) ดังนั้นในกล่องนี้คุณสามารถอ่านทั้งหมดExceptionsที่แอปพลิเคชันของคุณโยน ด้วยวิธีนี้คุณไม่จำเป็นต้องล้าง logcat และทำพังอีกครั้ง ฉันคิดว่า Android Studio มีตัวเลือกนี้ด้วย
Marco Acierno

1
การกรอง logcat ใน Eclipse สามารถทำได้โดยพิมพ์ชื่อแพ็คเกจ Java ในฟิลด์ชื่อแอปพลิเคชันของตัวกรอง
Stephane

ฉันคิดว่าประเด็นหลักคือการทำความเข้าใจร่องรอยการย้อนกลับที่ได้รับเมื่อมีข้อยกเว้นเกิดขึ้น FCs ค่อนข้างแย่เมื่อไม่มีร่องรอยกลับมาหรือใช้ไม่ได้ซึ่งเป็นจุดที่มันมีขนดก แต่ฉันคิดว่าคำอธิบายนี้เป็นคำนำแรกที่ดีในการค้นหา / ระบุข้อผิดพลาดดังกล่าว
DooMMasteR

4
ทุกอย่างง่ายขึ้นเมื่อ logcat ของคุณมีร่องรอยข้อผิดพลาดบางอย่าง แต่ในกรณีที่ logcat ไม่มีอะไร stackoverflow.com/questions/32455645/…
Marian Paździoch

4
ปัญหาคือบรรทัดไม่มีข้อผิดพลาดซึ่งเขียนและชี้โดยการติดตามสแต็ก
Hilal

115

คุณสามารถใช้เครื่องมือ ADB ของ Googleที่จะได้รับLogcat fileในการวิเคราะห์ปัญหา

adb logcat > logcat.txt

เปิดlogcat.txtไฟล์และค้นหาชื่อแอปพลิเคชันของคุณ ควรมีข้อมูลเกี่ยวกับสาเหตุที่มันล้มเหลวหมายเลขบรรทัดชื่อคลาส ฯลฯ


มันยอดเยี่ยมมากมันจะแสดงให้คุณเห็นอย่างรวดเร็วว่ามีอะไรเกิดขึ้นบนอุปกรณ์แม้ว่าตัวดีบักเกอร์ของคุณจะไม่สามารถตรวจจับได้ซึ่งอาจเกิดขึ้นกับ Xamarin หากรันไทม์ไม่สามารถโหลดได้
jvenema

1
ฉันไม่เห็นสาเหตุที่แอพของฉันหยุดทำงานใน logcat studio ของ android ไม่มีข้อผิดพลาดเลย คำตอบนี้ให้สิ่งที่ฉันต้องการ ต่อมาฉันก็รู้ว่าฉันมีตัวกรองบางตัวใน logcat ในสตูดิโอซึ่งทำให้ฉันไม่เห็นข้อผิดพลาด ฉันเปลี่ยนกลับไปเป็น "แสดงเฉพาะแอปพลิเคชันที่เลือก" และฉันกลับมาทำงานอีกครั้ง
Yannick

คุณควรเพิ่ม-dมิฉะนั้นคุณไม่ต้อง ctrl-C เพื่อออกจาก logcat ฉันทำadb logcat -v time -d > filename.txt
Karakuri

37

ขั้นแรกให้คุณตรวจสอบว่าแอปของคุณจุดใดผิดพลาด ( Unfortunately, MyApp has stopped.) สำหรับสิ่งนี้คุณสามารถใช้Log.e("TAG", "Message");โดยใช้บรรทัดนี้คุณสามารถดูแอพของคุณใน logcat

หลังจากนั้นคุณจะพบว่าจุดไหนที่แอพของคุณหยุดมันเป็นเรื่องง่ายมากที่จะแก้ไขที่ด้านข้างของคุณ


28

เพียงตรวจสอบข้อผิดพลาดใน log cat

คุณได้รับตัวเลือก log cat จากใน eclipse:

window-> show view-> others-> Android-> Logcat

Log cat มีข้อผิดพลาด

ฉลาดอื่น ๆ คุณยังสามารถตรวจสอบข้อผิดพลาดโดยการเรียกใช้โปรแกรมประยุกต์ในโหมดแก้ไขข้อบกพร่อง อันดับแรกตั้งเบรกพอยต์หลังจากนั้นโดยทำ:

คลิกขวาที่ project-> debug as-> แอปพลิเคชัน Android


27

หมายเหตุ:คำตอบนี้ใช้ Android Studio 2.2.2

หมายเหตุ 2: ฉันกำลังพิจารณาว่าอุปกรณ์ของคุณเชื่อมต่อเรียบร้อยแล้ว


สิ่งแรกที่คุณทำเมื่อแอปพลิเคชันของคุณขัดข้องดูใน LogCat ที่ด้านล่างของ Android Studio มีแถบเครื่องมือพร้อมรายการเมนู:

ภาพ

คลิกที่ "Android Monitor" (ภาพที่ฉันขีดเส้นใต้ในภาพด้านบน ^)

ตอนนี้คุณจะได้รับสิ่งนี้:

ภาพ

เปลี่ยน " Verbose" เป็น " Error" ตอนนี้จะแสดงข้อผิดพลาดที่บันทึกไว้ให้คุณเท่านั้น ไม่ต้องกังวลเกี่ยวกับข้อผิดพลาดเหล่านี้ (ถ้าคุณได้รับ) ตอนนี้

ภาพ

ตกลง. ตอนนี้ทำสิ่งที่คุณทำผิดพลาดแอพของคุณ หลังจากแอปล่มให้ไปที่ logcat ของคุณ คุณควรพบบันทึกข้อผิดพลาดใหม่ที่มีจำนวนมากat:x.x.x: และCaused by: TrumpIsPresidentExceptionเช่น ไปที่Caused by:คำสั่งนั้นใน logcat ของคุณ

ภาพ

ถัดไปไปที่Caused By:ควรจะมีข้อยกเว้นที่เกิดขึ้น ในกรณีของฉันมันคือRuntimeExceptionและภายใต้มันควรจะมีบรรทัดที่มีลิงค์สีน้ำเงินเช่น:

ภาพ

หากCaused by:ไม่มีเส้นที่มีข้อความสีฟ้าอยู่ข้างใต้ให้ค้นหาอีกอันCaused by:ที่ทำ

คลิกที่ลิงค์สีน้ำเงินที่ ควรนำคุณไปยังที่ที่เกิดปัญหา ในกรณีของฉันมันเกิดจากสายนี้:

throw new RuntimeException();

ดังนั้นตอนนี้ฉันรู้ว่าทำไมมันล้มเหลว มันเป็นเพราะฉันโยนข้อยกเว้นตัวเอง นี่เป็นข้อผิดพลาดที่เห็นได้ชัด


อย่างไรก็ตามสมมติว่าฉันมีข้อผิดพลาดอื่น:

java.lang.NullPointerException

ฉันตรวจสอบ logcat ของฉันฉันคลิกที่ลิงค์สีน้ำเงินมันให้ฉันและเอาฉันที่นี่:

mTextView.setText(myString);

ดังนั้นตอนนี้ฉันต้องการแก้ปัญหา ตามคำถาม StackOverflow นี้เป็น NullPointerException nullกล่าวว่าสิ่งที่เป็น

งั้นลองหาว่ามันว่างเปล่า มีความเป็นไปได้สองอย่าง อาจmTextViewเป็นโมฆะหรือmyStringเป็นโมฆะ หากต้องการค้นหาก่อนถึง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.
  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เรากำลังตรวจสอบใน Debug นั่นเป็นเหตุผลที่เราเปลี่ยนเป็น debug

ประกาศLog.dมีพารามิเตอร์แรกในกรณีของเรา "AppDebug" คลิกที่เมนูแบบเลื่อนลง "ไม่มีตัวกรอง" ที่ด้านบนขวาของ logcat เลือก "แก้ไขการกำหนดค่าตัวกรอง" ตั้งชื่อให้กับตัวกรองของคุณและใน "บันทึกแท็ก" ให้ใส่ "Debug แอป" คลิก "ตกลง" ตอนนี้คุณควรเห็นสองบรรทัดใน logcat:

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

ดังนั้นตอนนี้เรารู้แล้วว่า mTextView ไม่มีค่า

ฉันสังเกตรหัสของฉันตอนนี้ฉันสังเกตเห็นบางสิ่ง

ฉันprivate TextView mTextViewประกาศที่ด้านบนสุดของชั้นเรียน แต่ฉันไม่ได้นิยาม

โดยทั่วไปฉันลืมที่จะทำเช่นนี้ใน onCreate () ของฉัน:

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

นั่นmTextViewเป็นสาเหตุที่เป็นโมฆะเพราะฉันลืมบอกแอพของฉันว่ามันคืออะไร ดังนั้นฉันจึงเพิ่มบรรทัดนั้นรันแอพของฉันและตอนนี้แอพก็ไม่ผิดพลาด



1
นี่เป็นข้อมูลที่ดี แต่การใช้รูปภาพของ Stack Trace จะลดประโยชน์ของมัน - ไม่สามารถค้นหารูปภาพไม่สามารถคัดลอกและวางไม่สามารถหยิบขึ้นมาโดยโปรแกรมอ่านหน้าจอและอ่านยากขึ้น (ฉันไม่ได้ลงคะแนนโดยวิธีเพียงแค่ชี้ให้เห็น)
EJoshuaS - คืนสถานะโมนิก้า

1
@EJoshuaS ฉันไม่ได้บอกว่าจะให้ภาพถ่อ
Ab

19

ป๊อปอัปนี้แสดงเฉพาะเมื่อคุณได้รับข้อยกเว้นร้ายแรงในรหัสของคุณซึ่งจะหยุดการทำงานของแอพ มันอาจจะเป็นข้อยกเว้นใด ๆNullPointerException,OutOfMemoryExceptionฯลฯ

วิธีที่ดีที่สุดในการตรวจสอบคือผ่านLogcatหากคุณยังคงพัฒนาแอพใน Android studio ซึ่งเป็นวิธีที่รวดเร็วในการอ่านการติดตามสแต็กและตรวจสอบสาเหตุของแอป

หากแอปของคุณมีอยู่แล้วคุณจะไม่สามารถใช้logcatได้ ดังนั้นเพื่อให้คุณสามารถนำCrashlyticsไปใช้เพื่อให้คุณรายงานข้อผิดพลาดของข้อยกเว้นใด ๆ ที่เกิดขึ้น


17

ตรวจสอบLogcatข้อความของคุณและดูManifestไฟล์ของคุณ ควรมีบางสิ่งที่ขาดหายไปเช่นการกำหนดActivity,สิทธิ์ของผู้ใช้และอื่น ๆ


14

คุณสามารถใช้เครื่องมือเหล่านี้:

  1. adb logcat

  2. adb logcat> logs.txt (คุณสามารถใช้ตัวแก้ไขเพื่อเปิดและค้นหาข้อผิดพลาด)

  3. eclipse logcat (หากมองไม่เห็นใน eclipse, ไปที่ Windows-> Show View-> Others-> Android-> LogCat)

  4. Android Debug Monitor หรือ Android Device Monitor (พิมพ์คำสั่งมอนิเตอร์หรือเปิดผ่าน UI)

ป้อนคำอธิบายรูปภาพที่นี่

  1. Android Studio

ฉันแนะนำให้ใช้Android Debug Monitorมันดี เพราะคราสหยุดทำงานเมื่อมีบันทึกมากเกินไปและผ่านตัวกรอง adcat logcat และยากทั้งหมด


12

คุณต้องตรวจสอบ Stack trace

ทำอย่างไร

บน IDE ของคุณตรวจสอบ windows form LOGCAT

หากคุณไม่เห็นหน้าต่าง logcat ให้ไปที่เส้นทางนี้แล้วเปิดขึ้น

window->show view->others->Android->Logcat

หากคุณใช้ Google-Api ให้ไปที่เส้นทางนี้

adb logcat> logcat.txt


10

ในวิธี showToast () ด้านล่างคุณจะต้องผ่านพารามิเตอร์อื่นสำหรับบริบทหรือบริบทของแอปพลิเคชันด้วยการทำเช่นนั้นคุณสามารถลองได้

  public void showToast(String error, Context applicationContext){
        LayoutInflater inflater = getLayoutInflater();
        View view = inflater.inflate(R.layout.custom_toast, (ViewGroup)      
        findViewById(R.id.toast_root));
        TextView text = (TextView) findViewById(R.id.toast_error);
        text.setText(error);
        Toast toast = new Toast(applicationContext);
        toast.setGravity(Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0);
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.setView(view);
        toast.show();
}

9

ให้ฉันแบ่งปันการวิเคราะห์ Logcat ขั้นพื้นฐานเมื่อคุณพบกับ Force Close (เมื่อแอพหยุดทำงาน)

DOCS

เครื่องมือพื้นฐานจาก Android เพื่อรวบรวม / วิเคราะห์บันทึกเป็น logcat

นี่คือหน้าของ Android เกี่ยวกับ logcat

หากคุณใช้ android Studio คุณสามารถตรวจสอบลิงค์นี้ได้

จับ

โดยทั่วไปคุณสามารถจับ logcat ด้วยตนเองด้วยคำสั่งต่อไปนี้ (หรือเพียงตรวจสอบหน้าต่าง AndroidMonitor ใน AndroidStudio):

adb logcat

มีพารามิเตอร์จำนวนมากที่คุณสามารถเพิ่มลงในคำสั่งซึ่งช่วยให้คุณสามารถกรองและแสดงข้อความที่คุณต้องการ ... นี่เป็นเรื่องส่วนตัว ... ฉันมักจะใช้คำสั่งด้านล่างเพื่อรับข้อความเวลา:

adb logcat -v time

คุณสามารถเปลี่ยนเส้นทางผลลัพธ์ไปยังไฟล์และวิเคราะห์ใน Text Editor

วิเคราะห์

หากแอพของคุณพังคุณจะได้รับสิ่งต่อไปนี้:

07-09 08:29:13.474 21144-21144/com.example.khan.abc D/AndroidRuntime: Shutting down VM
07-09 08:29:13.475 21144-21144/com.example.khan.abc E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.khan.abc, PID: 21144
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
     at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
     at android.view.View.performClick(View.java:4848)
     at android.view.View$PerformClick.run(View.java:20262)
     at android.os.Handler.handleCallback(Handler.java:815)
     at android.os.Handler.dispatchMessage(Handler.java:104)
     at android.os.Looper.loop(Looper.java:194)
     at android.app.ActivityThread.main(ActivityThread.java:5631)
     at java.lang.reflect.Method.invoke(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:372)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
07-09 08:29:15.195 21144-21144/com.example.khan.abc I/Process: Sending signal. PID: 21144 SIG: 9

บันทึกส่วนนี้แสดงข้อมูลจำนวนมาก:

  • เมื่อปัญหาเกิดขึ้น: 07-09 08:29:13.475

มันเป็นสิ่งสำคัญที่จะตรวจสอบเมื่อปัญหาเกิดขึ้น ... คุณอาจพบข้อผิดพลาดหลายอย่างในบันทึก ... คุณต้องแน่ใจว่าคุณกำลังตรวจสอบข้อความที่เหมาะสม :)

  • แอปใดที่ขัดข้อง: com.example.khan.abc

ด้วยวิธีนี้คุณจะรู้ว่าแอปใดขัดข้อง (เพื่อให้แน่ใจว่าคุณกำลังตรวจสอบบันทึกเกี่ยวกับข้อความของคุณ)

  • ข้อผิดพลาดใด: java.lang.NullPointerException

ข้อผิดพลาดข้อยกเว้นตัวชี้ NULL

  • ข้อมูลโดยละเอียดเกี่ยวกับข้อผิดพลาด: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference

คุณพยายามที่จะเรียกวิธีการonBackPressed()จากFragmentActivityวัตถุ อย่างไรก็ตามวัตถุนั้นเกิดขึ้นnullเมื่อคุณทำมัน

  • การติดตามสแต็ค: การติดตามสแต็คจะแสดงลำดับการเรียกใช้วิธีการ ... บางครั้งข้อผิดพลาดเกิดขึ้นในวิธีการโทร (และไม่ได้อยู่ในวิธีการที่เรียก)

    ที่ com.example.khan.abc.AudioFragment $ 1.onClick (AudioFragment.java:125)

ข้อผิดพลาดเกิดขึ้นในไฟล์วิธีการcom.example.khan.abc.AudioFragment.javaภายในonClick()ที่บรรทัด: 125(stacktrace แสดงบรรทัดที่เกิดข้อผิดพลาด)

มันถูกเรียกโดย:

at android.view.View.performClick(View.java:4848)

ซึ่งถูกเรียกโดย:

at android.view.View$PerformClick.run(View.java:20262)

ซึ่งถูกเรียกโดย:

at android.os.Handler.handleCallback(Handler.java:815)

ฯลฯ ....

ภาพรวม

นี่เป็นเพียงภาพรวม ... ไม่ใช่บันทึกทั้งหมดที่ง่าย ฯลฯ ... มันเป็นเพียงการแบ่งปันแนวคิดและให้ข้อมูลระดับเริ่มต้นแก่คุณ ...

ฉันหวังว่าฉันจะช่วยคุณได้ ... ขอแสดงความนับถือ


8

ใช้LogCatและลองค้นหาสาเหตุที่ทำให้แอปขัดข้อง

หากต้องการดู Logcat ถ้าคุณใช้Android Studioจากนั้นกดALT + 6 หรือ

ถ้าคุณใช้Eclipseจากนั้นเลือก Window -> Open Perspective -> Other - LogCat

ไปที่ LogCat จากข้อผิดพลาดในการเลือกเมนูแบบเลื่อนลง ข้อมูลนี้จะมีข้อมูลที่จำเป็นทั้งหมดเพื่อช่วยในการแก้ปัญหา หากวิธีนี้ไม่ได้ผลให้โพสต์ LogCat เพื่อแก้ไขคำถามของคุณและใครบางคนจะช่วยคุณได้


7

หากแอปของคุณด้วยเหตุผลบางอย่างขัดข้องโดยไม่มี stacktrace ที่ดี ลองดีบั๊กจากบรรทัดแรกแล้วไปทีละบรรทัดจนกว่าจะเกิดข้อผิดพลาด จากนั้นคุณจะได้คำตอบว่าสายไหนทำให้คุณเดือดร้อน น่าจะเป็นไปได้ว่าคุณสามารถห่อมันให้เป็นลองบล็อก catch และพิมพ์ข้อผิดพลาดออก


5

คุณยังสามารถรับข้อความแสดงข้อผิดพลาดนี้ได้เองโดยไม่ต้องมีการติดตามสแต็กหรือข้อความแสดงข้อผิดพลาดใด ๆ เพิ่มเติม

ในกรณีนี้คุณต้องตรวจสอบให้แน่ใจว่ารายการ Android ของคุณได้รับการกำหนดค่าอย่างถูกต้อง (รวมถึงการรวมรายการที่เกิดขึ้นจากห้องสมุดและกิจกรรมใด ๆ ที่จะมาจากห้องสมุด) และให้ความสนใจเป็นพิเศษกับกิจกรรมแรกที่แสดงในแอปพลิเคชันของคุณ .


3
ฉันจะสนใจถ้าคุณสามารถอัปโหลดโครงการที่แสดงปรากฏการณ์นี้
CommonsWare

5

ความผิดพลาดระหว่างการพัฒนา

ลองใช้เครื่องมือที่ชื่นชอบLogViewที่จะได้รับการบันทึกและวิเคราะห์พวกเขาในระหว่างการพัฒนา
ตรวจสอบให้แน่ใจว่าได้ทำเครื่องหมาย./logviewและ./lib/logview.jarปฏิบัติการได้เมื่อทำงานใน Linux

ถ้าคุณไม่ชอบมันมีอยู่เป็นจำนวนมากทางเลือกที่ผู้ชมบันทึกเดสก์ทอปสำหรับ Android

ความผิดพลาดในป่า

รวมเครื่องมือการรายงานข้อผิดพลาดแบบเรียลไทม์เช่นFirebase Crashlyticsเพื่อรับข้อยกเว้นที่ไม่สามารถจัดการได้ซึ่งเกิดขึ้นบนอุปกรณ์ของผู้ใช้

อ่านวิธีการปล่อยแอพ Buggy (และการถ่ายทอดสดเพื่อบอกเล่าเรื่องราว)เพื่อทราบข้อมูลเพิ่มเติมเกี่ยวกับการจัดการข้อบกพร่องในฟิลด์


4

ผู้คนทำผิดพลาดและก็เขียนโปรแกรมเช่นกัน

เมื่อใดก็ตาม errorเกิดขึ้นให้ตรวจสอบกับ logcat ด้วยตัวอักษรสีแดง แต่คุณสามารถค้นหาปัญหาที่แท้จริงในข้อความสีฟ้าที่มีขีดเส้นใต้ในข้อความสีแดงเหล่านั้น

ตรวจสอบให้แน่ใจว่าหากคุณสร้างใหม่ activityให้ประกาศactivityในAndroidManifestไฟล์เสมอ

หากเพิ่มการอนุญาตให้ประกาศในAndroidMainifestไฟล์เช่นกัน


4

Logcat - เพื่อตรวจสอบบันทึกในขั้นตอนการพัฒนาของ Android Studio

เริ่มแรกล้างข้อมูล Logcat และปล่อยให้แอปหยุดทำงานอีกครั้งเพื่อให้คุณสามารถรับรายละเอียดบันทึกที่ขัดข้องเท่านั้น คุณต้องตรวจสอบการติดตามสแต็ค

ในขณะที่น่าเสียดาย MyApp หยุดทำงาน มีสาเหตุหลายประการ คุณสามารถตรวจสอบเหมือนกันในบันทึก สำหรับสิ่งนี้คุณสามารถใช้ Log.e ("TAG", "Message");

ข้อผิดพลาดทั่วไประหว่างแอปขัดข้องเช่น:

  1. ความผิดพลาดในการเข้ารหัส (การใช้คำหลักผิด)
  2. ชื่อคุณสมบัติไม่ตรงกัน
  3. ปลั๊กอินที่ไม่รองรับ (อาจจะ)
  4. รุ่นไม่ตรงกัน (อาจ)
  5. กิจกรรมที่ขาดหายไปในไฟล์ AndroidManifest
  6. สิทธิ์ที่ขาดหายไปในไฟล์ AndroidManifest
  7. NullPointerException ที่ใช้กันมากที่สุด
  8. ประกาศ แต่ไม่ได้กำหนดไว้

วิธีแก้ไขข้อผิดพลาดของแอพ:

  • โปรดจำไว้เหนือคะแนนและผ่านมัน
  • ด้วยข้อผิดพลาดคุณจะได้รับชื่อไฟล์ในสีฟ้า (คลิกที่พวกเขาและข้ามไปยังรหัสจากข้อผิดพลาดที่เกิดขึ้น)

3

ก่อนอื่นคุณต้องตรวจสอบที่และสาเหตุที่แอปของคุณเกิดข้อผิดพลาด(Unfortunately, MyApp has stopped.).ด้วยความช่วยเหลือของLOGคุณสามารถทราบได้ว่าเกิดอะไรขึ้น

หลังจากนั้นคุณจะพบว่าจุดใดที่แอพของคุณหยุดแก้ไขจุดนั้นจากจุดของคุณ


3

หากคุณไม่มีบันทึกที่น่าสนใจในเทอร์มินัลของคุณ (หรือพวกเขาไม่เกี่ยวข้องโดยตรงกับแอพของคุณ) อาจเป็นเพราะปัญหาของคุณเนื่องจากห้องสมุดท้องถิ่น ในกรณีนี้คุณควรตรวจสอบไฟล์ "tombstone" ภายในเทอร์มินัลของคุณ

ตำแหน่งเริ่มต้นสำหรับไฟล์หลุมฝังศพนั้นขึ้นอยู่กับอุปกรณ์ทุกชนิด แต่ถ้าเป็นกรณีนี้คุณจะมีบันทึกแจ้ง: Tombstone written to: /data/tombstones/tombstone_06

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการตรวจสอบhttps://source.android.com/devices/tech/debug


0

การรันคำสั่งนี้ในเทอร์มินัลสามารถช่วยค้นหาปัญหา:

gradlew build > log.txt 2>details.txt

จากนั้นคุณควรไปที่ตำแหน่งไฟล์ gradlew ในไฟล์บันทึกการอ่านสองไฟล์ด้านบน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.