উত্তর:
যদি আপনার অ্যাপ্লিকেশনটি অন্য লোকেদের দ্বারা ডাউনলোড করা হচ্ছে এবং দূরবর্তী ডিভাইসগুলিতে ক্রাশ হচ্ছে, আপনি একটি অ্যান্ড্রয়েড ত্রুটি রিপোর্টিং লাইব্রেরিটি দেখতে চাইতে পারেন ( এই এসও পোস্টে রেফারেন্স করা )। যদি এটি কেবলমাত্র আপনার নিজস্ব ডিভাইসে LogCat.
থাকে তবে আপনি ব্যবহার করতে পারেন এমনকি ক্র্যাশ হওয়ার সময় ডিভাইসটি কোনও হোস্ট মেশিনের সাথে সংযুক্ত না থাকলেও, ডিভাইসটি সংযুক্ত করে এবং একটি adb logcat
আদেশ জারি করা পুরো লগক্যাট ইতিহাসটি ডাউনলোড করবে (কমপক্ষে তার পরিমাণে বাফার করা হয় যা সাধারণত লগ ডেটার লূট হয়, এটি কেবল অসীম নয়)। এই বিকল্পগুলির মধ্যে কোনওটিই কি আপনার প্রশ্নের উত্তর দেয়? না পারলে আপনি কী আরও কিছুটা সন্ধান করছেন তা স্পষ্ট করার চেষ্টা করতে পারবেন না?
adb logcat
যে কোনও ডিরেক্টরি অ্যাডবিতে রয়েছে তা থেকে চালান ternative বিকল্পভাবে আপনি একটিগ্রাহী প্লাগইনে অন্তর্ভুক্ত SDK সরঞ্জামগুলি ব্যবহার করতে পারেন
$SDK_DIR/platform-tools/
। ত্রুটি দেখাতে:.\adb.exe logcat -v time *:E
পথ এই কাজ করতে বাস্তবায়ন হয় Thread.UncaughtExceptionHandler
ইন্টারফেস এবং তা পাস Thread.setDefaultUncaughtExceptionHandler()
আপনার কার্যকলাপ এর শুরুতে onCreate()
। এখানে বাস্তবায়ন ক্লাস TopExceptionHandler
।
public class TopExceptionHandler implements Thread.UncaughtExceptionHandler {
private Thread.UncaughtExceptionHandler defaultUEH;
private Activity app = null;
public TopExceptionHandler(Activity app) {
this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
this.app = app;
}
public void uncaughtException(Thread t, Throwable e) {
StackTraceElement[] arr = e.getStackTrace();
String report = e.toString()+"\n\n";
report += "--------- Stack trace ---------\n\n";
for (int i=0; i<arr.length; i++) {
report += " "+arr[i].toString()+"\n";
}
report += "-------------------------------\n\n";
// If the exception was thrown in a background thread inside
// AsyncTask, then the actual exception can be found with getCause
report += "--------- Cause ---------\n\n";
Throwable cause = e.getCause();
if(cause != null) {
report += cause.toString() + "\n\n";
arr = cause.getStackTrace();
for (int i=0; i<arr.length; i++) {
report += " "+arr[i].toString()+"\n";
}
}
report += "-------------------------------\n\n";
try {
FileOutputStream trace = app.openFileOutput("stack.trace",
Context.MODE_PRIVATE);
trace.write(report.getBytes());
trace.close();
} catch(IOException ioe) {
// ...
}
defaultUEH.uncaughtException(t, e);
}
}
দ্রষ্টব্য আমরা অ্যান্ড্রয়েড ফ্রেমওয়ার্কের ডিফল্ট এটিকে হ্যান্ডেল করতে দেই।
আপনার ক্রিয়াকলাপের শীর্ষে উপরের শ্রেণির উদাহরণটি এভাবে নিবন্ধ করুন:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Thread.setDefaultUncaughtExceptionHandler(new TopExceptionHandler(this));
...
এই হ্যান্ডলারটি কোনও ফাইলের মধ্যে ট্রেস সংরক্ষণ করে। ReaderScope
পরের বার পুনরায় আরম্ভ করা হলে , এটি ফাইলটি সনাক্ত করে এবং ব্যবহারকারী যদি সে বিকাশকারীকে এটি ইমেল করতে চায় তবে অনুরোধ করে।
স্ট্যাক ট্রেসটি ইমেল করতে ইমেলটিতে প্যাক করতে নিম্নলিখিত কোডটি কার্যকর করুন।
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(ReaderScopeActivity.this.openFileInput("stack.trace")));
while((line = reader.readLine()) != null) {
trace += line+"\n";
}
} catch(FileNotFoundException fnfe) {
// ...
} catch(IOException ioe) {
// ...
}
Intent sendIntent = new Intent(Intent.ACTION_SEND);
String subject = "Error report";
String body = "Mail this to appdeveloper@gmail.com: " + "\n" + trace + "\n";
sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"readerscope@altcanvas.com"});
sendIntent.putExtra(Intent.EXTRA_TEXT, body);
sendIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
sendIntent.setType("message/rfc822");
ReaderScopeActivity.this.startActivity(Intent.createChooser(sendIntent, "Title:"));
ReaderScopeActivity.this.deleteFile("stack.trace");
অথবা আপনি এসিআরএর ত্রুটি প্রতিবেদন করার সিস্টেমটিও ব্যবহার করতে পারেন ust কেবল আপনার প্রকল্পের লিবিতে ACRA.jar অন্তর্ভুক্ত করুন এবং আপনার লঞ্চের ক্রিয়াকলাপ শ্রেণীর ঘোষণার আগে নীচের কোড স্নিপেট ব্যবহার করুন
@ReportsCrashes(formKey = "", mailTo = "abc@gmail.com;def@yahoo.com", mode = ReportingInteractionMode.SILENT)
অথবা আপনি কনসোল থেকে এটি চেষ্টা করতে পারেন: -
adb logcat -b crash
এটি http://www.herongyang.com/Android/Debug-adb-logcat-Command-Debugging.html থেকে এসেছে
আপনি অ্যাডবি ব্যবহার করতে পারেন:
adb logcat AndroidRuntime:E *:S
আপনি কনসোল থেকে এটি চেষ্টা করতে পারেন:
adb logcat --buffer=crash
এই বিকল্প সম্পর্কে আরও তথ্য:
adb logcat --help
...
-b <buffer>, --buffer=<buffer> Request alternate ring buffer, 'main',
'system', 'radio', 'events', 'crash', 'default' or 'all'.
Multiple -b parameters or comma separated list of buffers are
allowed. Buffers interleaved. Default -b main,system,crash.
আপনি যদি Eclipse ব্যবহার করছেন তবে নিশ্চিত হয়ে নিন যে আপনি ডিবাগটি ব্যবহার করেছেন এবং না চালাচ্ছেন। আপনি ডিবাগের দৃষ্টিভঙ্গিতে রয়েছেন তা নিশ্চিত করুন (উপরের ডানদিকে) লগ প্রিন্ট করার জন্য আপনাকে কয়েকবার 'রেজ্যুম' (F8) চাপতে হতে পারে। ক্র্যাশ লগটি নীচে লোগক্যাট উইন্ডোতে থাকবে - পূর্ণস্ক্রিনের জন্য ডাবল ক্লিক করুন এবং নিশ্চিত করুন যে আপনি নীচে স্ক্রোল করেছেন। আপনি ত্রুটির জন্য লাল পাঠ্য দেখতে পাবেন, ক্রাশের চিহ্নটি এরকম কিছু হবে
09-04 21:35:15.228: ERROR/AndroidRuntime(778): Uncaught handler: thread main exiting due to uncaught exception
09-04 21:35:15.397: ERROR/AndroidRuntime(778): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dazlious.android.helloworld/com.dazlious.android.helloworld.main}: java.lang.ArrayIndexOutOfBoundsException
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread.access$1800(ActivityThread.java:112)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.os.Handler.dispatchMessage(Handler.java:99)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.os.Looper.loop(Looper.java:123)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread.main(ActivityThread.java:3948)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at java.lang.reflect.Method.invokeNative(Native Method)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at java.lang.reflect.Method.invoke(Method.java:521)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at dalvik.system.NativeStart.main(Native Method)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): Caused by: java.lang.ArrayIndexOutOfBoundsException
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at com.example.android.helloworld.main.onCreate(main.java:13)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): ... 11 more
এটির জন্য গুরুত্বপূর্ণ অংশগুলি হ'ল
09-04 21:35:15.397: ERROR/AndroidRuntime(778): Caused by: java.lang.ArrayIndexOutOfBoundsException
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at com.example.android.helloworld.main.onCreate(main.java:13)
তারা আমাদের জানান যে এটি অনক্রিট পদ্ধতিতে মেইনজাজা-এর 13 লাইনে সীমানা ব্যতিক্রমের একটি অ্যারে ছিল।
আপনি Apphance ব্যবহার করতে পারেন। এটি একটি ক্রস-প্ল্যাটফর্ম পরিষেবা (বর্তমানে মূলত অ্যান্ড্রয়েড, তাদের পথে অন্যান্য প্ল্যাটফর্ম সহ আইওএস) যা কোনও মোবাইল ডিভাইস (অ্যান্ড্রয়েড, আইওএস এখন - উন্নয়নের অধীনে থাকা) রিমোটলি ডিবাগ করতে দেয়। এটি কেবল একটি ক্র্যাশলগের চেয়ে অনেক বেশি, বাস্তবে এটি অনেক বেশি: লগিং, পরীক্ষকগণ দ্বারা ক্র্যাশলগগুলির সমস্যার প্রতিবেদন। এটি সংহত করতে প্রায় 5 মিনিট সময় নেয়। বর্তমানে আপনি বদ্ধ বিটাতে অ্যাক্সেসের জন্য অনুরোধ করতে পারেন।
দাবি অস্বীকার: আমি পলিডিয়ার সিটিও, এটি অ্যাফেন্সের পিছনে একটি সংস্থা এবং এর সহ-স্রষ্টা।
আপডেট: Apphance আর বন্ধ বিটা! আপডেট 2: http://applause.com অফার অংশ হিসাবে Apphance উপলব্ধ
libs
ডিরেক্টরিতে রাখতে হবে । এই গিথুব প্রতিশ্রুতিটি আমার ওয়ার্ল্ডম্যাপ অ্যাপ্লিকেশনটিকে বাড়ানোর জন্য আমার প্রয়োজনীয় পরিবর্তনগুলি দেখায়।
ক্র্যাশ লগের জন্য এখানে আরও একটি সমাধান।
অ্যান্ড্রয়েড বাজারে "ক্র্যাশ কালেক্টর" নামে একটি সরঞ্জাম রয়েছে
আরও তথ্যের জন্য নিম্নলিখিত লিঙ্ক চেক করুন
http://kpbird.blogspot.com/2011/08/android-application-crash-logs.html
আপনি এর থেকে Acra ব্যবহার করতে পারেন এই । আপনার প্রকল্পগুলিতে এই লাইব্রেরিটি অন্তর্ভুক্ত করে এবং এটি কনফিগার করে, আপনি তাদের ক্র্যাশ প্রতিবেদনগুলি (আপনার ইমেল বা জিডোকগুলিতে) পেতে পারেন। আমার অদক্ষ ইংরেজির জন্য আমি দুঃখিত.
আপনি যদি কোনও বেসিক ক্র্যাশ রিপোর্টিং সরঞ্জামের সন্ধান করছেন তবে ক্র্যাশলিটিক্স ব্যবহার করে দেখুন ।
আপনি যদি আরও উন্নত প্রতিবেদনের সরঞ্জাম চান তবে চেকআউট গ্রিফোনেট । এটি কোডের সঠিক লাইনের সাথে সংঘটিত সমস্ত ক্র্যাশগুলি লগ করে দেয় যা স্বয়ংক্রিয় চিহ্নিতকারীদের সাথে ক্র্যাশ ঘটায় যা আপনাকে ব্যবহারকারী ক্র্যাশ করার আগে কী কী পদক্ষেপ নিয়েছিল এবং আরও অনেক কিছু দেখায়।
শুভকামনা!
অ্যান্ড্রয়েড অ্যাপ্লিকেশনের জন্য আকরা ক্র্যাশ রিপোর্টার ব্যবহার করুন .. অ্যাক্রা লাইব
আপনার সমস্ত সমস্যা সমাধানের জন্য আমি এই গ্রন্থাগারটি তৈরি করেছি। ক্র্যাশ রিপোর্টার হ'ল একটি কার্যকর সরঞ্জাম যা আপনার সমস্ত ক্র্যাশগুলি ক্যাপচার করে এবং সেগুলি স্থানীয়ভাবে ডিভাইসে লগ করে
কেবল এই নির্ভরতা যুক্ত করুন এবং আপনি যেতে ভাল।
compile 'com.balsikandar.android:crashreporter:1.0.1'
স্থানীয়ভাবে ডিভাইসে আপনার সমস্ত ক্র্যাশগুলি সন্ধান করুন এবং আপনার সুবিধার্থে এগুলি ঠিক করুন। ক্র্যাশগুলি তারিখ এবং সময় ফর্ম্যাট ট্র্যাক করা সহজ ব্যবহার করে সংরক্ষণ করা হয়। এছাড়াও এটি নীচের পদ্ধতিটি ব্যবহার করে লগড ব্যতিক্রমগুলি ক্যাপচারের জন্য এপিআই সরবরাহ করে।
CrashRepoter.logException(Exception e)
আপনি লাইব্রেরির ক্র্যাশকাচার ব্যবহার করতে পারেন
আপনার ফোনটি কম্পিউটারের সাথে সংযুক্ত থাকাকালীন আপনি যদি ক্র্যাশ লগটি সন্ধান করে থাকেন তবে Eclipse এ DDMS ভিউটি ব্যবহার করুন এবং ডিবাগিংয়ের সময় আপনার অ্যাপটি ক্র্যাশ হওয়ার সাথে সাথে রিপোর্টটি ডিডিএমএসের মধ্যে লগগেটে রয়েছে।
1) USB এর মাধ্যমে ফোনে প্লাগ ইন করুন (ডাব্লু / বিকাশকারী ডিবাগিং বিকল্পগুলি সক্ষম করা হয়েছে)
2) টার্মিনালটি খুলুন এবং আপনার অ্যান্ড্রয়েড এসডিকে (ম্যাকের জন্য) নেভিগেট করুন:
cd ~/Library/Android/sdk/platform-tools
3) লগক্যাটটি সেই ডিরেক্টরি থেকে (আপনার টার্মিনালে) লগের অবিচ্ছিন্ন প্রবাহ তৈরি করতে (ম্যাকের জন্য):
./adb logcat
4) আপনার অ্যাপ্লিকেশনটি খুলুন যা ক্র্যাশ লগগুলি তৈরি করতে ক্র্যাশ হয়
5) টার্মিনাল বন্ধ করতে এবং ক্র্যাশ হওয়া অ্যাপটির সাথে সম্পর্কিত লগগুলি সন্ধান করতে Ctrl + C। এটি নীচের মতো কিছু বলতে পারে:
AndroidRuntime: FATAL EXCEPTION: main
এই পোস্টে ভিত্তি করে , এই শীর্ষ শ্রেণিকে "টপ এক্সেপশনহ্যান্ডলার" প্রতিস্থাপন হিসাবে ব্যবহার করুন
class TopExceptionHandler implements Thread.UncaughtExceptionHandler {
private Thread.UncaughtExceptionHandler defaultUEH;
private Activity app = null;
private String line;
public TopExceptionHandler(Activity app) {
this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
this.app = app;
}
public void uncaughtException(Thread t, Throwable e) {
StackTraceElement[] arr = e.getStackTrace();
String report = e.toString()+"\n\n";
report += "--------- Stack trace ---------\n\n";
for (int i=0; i<arr.length; i++) {
report += " "+arr[i].toString()+"\n";
}
report += "-------------------------------\n\n";
// If the exception was thrown in a background thread inside
// AsyncTask, then the actual exception can be found with getCause
report += "--------- Cause ---------\n\n";
Throwable cause = e.getCause();
if(cause != null) {
report += cause.toString() + "\n\n";
arr = cause.getStackTrace();
for (int i=0; i<arr.length; i++) {
report += " "+arr[i].toString()+"\n";
}
}
report += "-------------------------------\n\n";
try {
FileOutputStream trace = app.openFileOutput("stack.trace",
Context.MODE_PRIVATE);
trace.write(report.getBytes());
trace.close();
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL , new String[]{"kevineyni@gmail.com"});
i.putExtra(Intent.EXTRA_SUBJECT, "crash report azar");
String body = "Mail this to kevineyni@gmail.com: " + "\n" + trace + "\n";
i.putExtra(Intent.EXTRA_TEXT , body);
try {
startActivity(Intent.createChooser(i, "Send mail..."));
} catch (android.content.ActivityNotFoundException ex) {
// Toast.makeText(MyActivity.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}
// ReaderScopeActivity.this.startActivity(Intent.createChooser(sendIntent, "Title:"));
//ReaderScopeActivity.this.deleteFile("stack.trace");
} catch(IOException ioe) {
// ...
}
defaultUEH.uncaughtException(t, e);
}
private void startActivity(Intent chooser) {
}
}
.....
একই জাভা ক্লাস ফাইলে (ক্রিয়াকলাপ) .....
Public class MainActivity.....
.....
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Thread.setDefaultUncaughtExceptionHandler(new TopExceptionHandler(this));
.....
অ্যান্ড্রয়েড থেকে কার্স লগ অ্যাপ ব্যবহার করে দেখুন।
অ্যাপ্লিকেশন ডাউনলোড করতে লিঙ্কটি ব্যবহার করুন।