আমি কীভাবে আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশন থেকে ক্র্যাশ-ডেটা পেতে পারি?


737

আমি কীভাবে আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশন থেকে ক্র্যাশ ডেটা (কমপক্ষে স্ট্যাকের চিহ্নগুলি) পেতে পারি? কমপক্ষে আমার নিজের ডিভাইসে কাজ করার সময় কেবল দ্বারা পুনরুদ্ধার করা হচ্ছে, তবে আদর্শভাবে আমার অ্যাপ্লিকেশনটির যে কোনও উদাহরণটি বুনোতে চলছে যাতে আমি এটিকে উন্নত করতে এবং আরও দৃ make় করতে পারি।



আমি দেখতে পাচ্ছি যে এটি একটি রিমোট সার্ভারে প্রতিবেদনটি প্রেরণ করে। এটি একটি স্থানীয় ফাইল ব্যতিক্রম লগ করতে পারেন?

1
অ্যান্ড্রয়েড কোড. google.com/p/acra- এর
gdonald

এইটিকে আরও দৃust় বলে মনে হচ্ছে, যদি সমস্ত পুনরায় চেষ্টা করার পরেও রিপোর্টিং আপলোড করতে ব্যর্থ হয় তবে তারপরে এটি ফাইল বা স্ক্লাইট ডিবি লগ করতে পারে?
জেপিএম

উত্তর:


354

আপনি ACRA (অ্যান্ড্রয়েডের জন্য অ্যাপ্লিকেশন ক্র্যাশ প্রতিবেদন) লাইব্রেরিটি চেষ্টা করতে পারেন :

ACRA হ'ল একটি গ্রন্থাগার যা অ্যান্ড্রয়েড অ্যাপ্লিকেশনকে গুগলডোক ফর্মে স্বয়ংক্রিয়ভাবে তাদের ক্র্যাশ প্রতিবেদনগুলি পোস্ট করতে সক্ষম করে। অ্যান্ড্রয়েড অ্যাপ্লিকেশন বিকাশকারীদের লক্ষ্য করা হয় যখন তারা ক্রাশ হয় বা ভুল করে আচরণ করে তাদের অ্যাপ্লিকেশনগুলি থেকে ডেটা পেতে সহায়তা করে।

আপনার অ্যাপে এটি ইনস্টল করা সহজ, অত্যন্ত কনফিগারযোগ্য এবং আপনার কোথাও একটি সার্ভার স্ক্রিপ্ট হোস্ট করার দরকার নেই ... রিপোর্টগুলি কোনও Google ডক্স স্প্রেডশিটে প্রেরণ করা হয়!


8
এটি সেটআপ এবং ব্যবহার করা সহজ। প্রাক-বাজারের জায়গা ব্যবহারের জন্য এবং সম্ভবত পরেও প্রস্তাবিত Recommend
এমএক্সসিএল

1
এটি ব্যবহার শুরু হয়েছে এবং আমার আগে যে ঝাপটায় ছিল তার ত্রুটি প্রতিবেদন করা বা আমি যে হোমমেড দিয়ে শুরু করেছি তার চেয়ে এটি অসম্পূর্ণভাবে ভাল। এখনও অবধি, আমি "একরা" তে স্টোকড।
অ্যাড্রিয়ান স্পাইনেই

8
আকরার বড় সুবিধা হ'ল সহজেই ডেটা বিশ্লেষণ ও কল্পনা করতে গুগল এপিআইগুলি ব্যবহার করার সম্ভাবনা, এটি কীভাবে করবেন তার উদাহরণের জন্য jberkel.github.com/sms-backup-plus/acra-analysis দেখুন ।
জান বার্কেল

3
আমার কাছে খুব অস্থির বলে মনে হচ্ছে। ACRA নিজেই ক্র্যাশ হয়েছিল এবং সম্পর্কিত অ্যাপ ক্র্যাশ নয়, নিজের সম্পর্কে ক্র্যাশ প্রতিবেদন পাঠিয়েছে। -1
স্যান্ডর

19
ব্যাকএন্ড হিসাবে গুগল ডক্স আর সমর্থিত নয়
ইলিয়োকস

305

নমুনা অ্যাপ্লিকেশন এবং ডিবাগিংয়ের উদ্দেশ্যে, আমি একটি সহজ সমাধান ব্যবহার করি যা ডিভাইসের এসডি কার্ডে স্ট্যাকট্রেস লিখতে এবং / অথবা এটি একটি সার্ভারে আপলোড করতে দেয়। এই সমাধানটি প্রকল্প অ্যান্ড্রয়েড-রিমোট-স্ট্যাকট্রেস দ্বারা অনুপ্রাণিত হয়েছে (বিশেষত, সেভ-টু-ডিভাইস এবং আপলোড-টু-সার্ভার অংশগুলি) এবং আমি মনে করি এটি সুনিল দ্বারা উল্লিখিত সমস্যা সমাধান করে। এটি সর্বোত্তম নয়, তবে এটি কাজ করে এবং আপনি যদি কোনও উত্পাদন প্রয়োগে এটি ব্যবহার করতে চান তবে আপনি এটি উন্নত করতে পারেন। আপনি যদি সার্ভারে স্ট্যাকট্রেসগুলি আপলোড করার সিদ্ধান্ত নেন তবে index.phpসেগুলি দেখার জন্য আপনি একটি পিএইচপি স্ক্রিপ্ট ( ) ব্যবহার করতে পারেন । আপনি যদি আগ্রহী হন তবে আপনি নীচের সমস্ত উত্সগুলি খুঁজে পেতে পারেন - আপনার আবেদনের জন্য একটি জাভা ক্লাস এবং আপলোড করা স্ট্যাকট্রেস হোস্টিং সার্ভারের জন্য দুটি alচ্ছিক পিএইচপি স্ক্রিপ্ট।

একটি প্রসঙ্গে (যেমন মূল ক্রিয়াকলাপ), কল করুন

if(!(Thread.getDefaultUncaughtExceptionHandler() instanceof CustomExceptionHandler)) {
    Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
            "/sdcard/<desired_local_path>", "http://<desired_url>/upload.php"));
}

CustomExceptionHandler

public class CustomExceptionHandler implements UncaughtExceptionHandler {

    private UncaughtExceptionHandler defaultUEH;

    private String localPath;

    private String url;

    /* 
     * if any of the parameters is null, the respective functionality 
     * will not be used 
     */
    public CustomExceptionHandler(String localPath, String url) {
        this.localPath = localPath;
        this.url = url;
        this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
    }

    public void uncaughtException(Thread t, Throwable e) {
        String timestamp = TimestampFormatter.getInstance().getTimestamp();
        final Writer result = new StringWriter();
        final PrintWriter printWriter = new PrintWriter(result);
        e.printStackTrace(printWriter);
        String stacktrace = result.toString();
        printWriter.close();
        String filename = timestamp + ".stacktrace";

        if (localPath != null) {
            writeToFile(stacktrace, filename);
        }
        if (url != null) {
            sendToServer(stacktrace, filename);
        }

        defaultUEH.uncaughtException(t, e);
    }

    private void writeToFile(String stacktrace, String filename) {
        try {
            BufferedWriter bos = new BufferedWriter(new FileWriter(
                    localPath + "/" + filename));
            bos.write(stacktrace);
            bos.flush();
            bos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void sendToServer(String stacktrace, String filename) {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        List<NameValuePair> nvps = new ArrayList<NameValuePair>();
        nvps.add(new BasicNameValuePair("filename", filename));
        nvps.add(new BasicNameValuePair("stacktrace", stacktrace));
        try {
            httpPost.setEntity(
                    new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
            httpClient.execute(httpPost);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

upload.php

<?php
    $filename = isset($_POST['filename']) ? $_POST['filename'] : "";
    $message = isset($_POST['stacktrace']) ? $_POST['stacktrace'] : "";
    if (!ereg('^[-a-zA-Z0-9_. ]+$', $filename) || $message == ""){
        die("This script is used to log debug data. Please send the "
                . "logging message and a filename as POST variables.");
    }
    file_put_contents($filename, $message . "\n", FILE_APPEND);
?>

index.php

<?php
    $myDirectory = opendir(".");
    while($entryName = readdir($myDirectory)) {
        $dirArray[] = $entryName;
    }
    closedir($myDirectory);
    $indexCount = count($dirArray);
    sort($dirArray);
    print("<TABLE border=1 cellpadding=5 cellspacing=0 \n");
    print("<TR><TH>Filename</TH><TH>Filetype</th><th>Filesize</TH></TR>\n");
    for($index=0; $index < $indexCount; $index++) {
        if ((substr("$dirArray[$index]", 0, 1) != ".") 
                && (strrpos("$dirArray[$index]", ".stacktrace") != false)){ 
            print("<TR><TD>");
            print("<a href=\"$dirArray[$index]\">$dirArray[$index]</a>");
            print("</TD><TD>");
            print(filetype($dirArray[$index]));
            print("</TD><TD>");
            print(filesize($dirArray[$index]));
            print("</TD></TR>\n");
        }
    }
    print("</TABLE>\n");
?>

9
আমি মনে করি এটি কোনও কোনও রাজ্যে / দেশগুলিতে আইনী সমস্যা সৃষ্টি করবে
সেটজমোড়া

5
দ্রষ্টব্য: HttpPost httpPost = new HttpPost(url);আপনি যদি হানিকম্ব বা তারপরে টার্গেট করে থাকেন তবে অবশ্যই একটি অ্যাসিঙ্ক টাস্কে (বা হ্যান্ডলার ... একটি পৃথক থ্রেড) থাকতে হবে
ব্রায়ান ডেনি

4
@ জোসেট, কী ধরণের আইনী সমস্যা এবং কেন?
Varevarao

2
@varevarao আইনি সমস্যা (সম্ভবত) কারণ আপনি এই কোডটির সার্ভার-টু-সার্ভার বৈশিষ্ট্যটি ব্যবহার করে ব্যবহারকারীর সম্মতি ছাড়াই সংবেদনশীল ডিভাইস তথ্য প্রেরণ করছেন।
কাও

2
ডিফল্টঅ্যাক্সেশনহ্যান্ডলারটি ক্রিয়াকলাপের বিনোদন জুড়েই মনে হয়। আমি কাস্টম হ্যান্ডলারটি ইতিমধ্যে সেট না করা থাকলে কেবলমাত্র ডিফল্ট সেট করতে উত্তর আপডেট করেছি। এটি ছাড়া, প্রতিটি হ্যান্ডলার পূর্বেরটিকে ধরে রাখে এবং কল করে, মূলটি সমস্ত পথে। এটি ডুপ্লিকেট লগিংয়ের পাশাপাশি মেমরি ফাঁস সম্পর্কিত সমস্যাগুলির কারণ করে।
ডেভ ম্যাককল্ল্যান্ড

57

আপনি [বাগসেন্স] কারণও চেষ্টা করতে পারেন : স্প্যাম অন্য url এ পুনঃনির্দেশ । বাগসেন্স সমস্ত ক্র্যাশ প্রতিবেদন সংগ্রহ করে বিশ্লেষণ করে এবং আপনাকে অর্থবহ এবং ভিজ্যুয়াল প্রতিবেদন দেয়। এটি নিখরচায় এবং সংহত করার জন্য কোডের 1 লাইন

দাবি অস্বীকার: আমি একজন সহ-প্রতিষ্ঠাতা


4
আমি বাগসেন্স এবং এটির দুর্দান্ত চেষ্টা করেছি। সহজ এবং তাজা ইউআই, খুব দ্রুত। কোনও নির্বোধ বৈশিষ্ট্য ফুলে উঠছে না। সর্বাধিক ঘন ঘন ক্র্যাশগুলি দেখতে এবং স্ট্যাকট্রেসে খনন করা সহজ।
ভিজটিজ

আমরা ইদানীং কেবল ক্র্যাশ রিপোর্টিংয়ের চেয়ে অনেক বেশি কিছু করছি তবে নতুন বৈশিষ্ট্য ইত্যাদির জন্য কথা বলার সঠিক জায়গা এটি নয়
PanosJee

এটা চেষ্টা করেছি. স্ট্যাকট্রেস খুব বেশি সম্পূর্ণ না হলেও ত্রুটিগুলি কাজ করেছে, রিয়েল-টাইম ক্র্যাশ ডেটা আসে নি। ডিবাগ মোড কাজ করে না। আমি অ্যাপ্লিকেশন শ্রেণি থেকে যদিও একবারে প্রাথমিককরণের রুটে নামলাম (যদিও এটি বেশিরভাগ ক্ষেত্রে বোঝায়)। বাগসেন্সের একটি আশ্চর্যজনক ড্যাশবোর্ড রয়েছে, এমন লজ্জা যে কোনও কারণে ক্রাশের রিপোর্টগুলি কাজ করে না এবং প্রতীকটি ফ্রি টায়ারে নেই। গেটসেন্ট্রি ইনস্টল করতে আমাকে 5 মিনিট সময় নিয়েছে এবং এটি এই সাধারণ উদ্দেশ্যে ক্লায়েন্টটির সাথে অ্যান্ড্রয়েডের বাক্স থেকে সবেমাত্র কাজ করেছে: github.com/joshdholtz/Sentry-Android
albertpeiro

3
বাগসেন্স একীভূত করা সহজ এবং সহজ। তবে এটি ব্যয়বহুল। ফ্ল্যারি অ্যানালিটিক্স এবং পার্স ব্যবহার করে আমরা একই বাগ ইন্দ্রিয় কার্যকারিতা অর্জন করতে পারি। উভয়ই বিনামূল্যে এবং সংহত করার জন্য সহজ to
ভেঙ্কট

44

অ্যান্ড্রয়েড ২.২ এ এখন অ্যান্ড্রয়েড মার্কেট অ্যাপ্লিকেশনগুলি থেকে স্বয়ংক্রিয়ভাবে ক্র্যাশ প্রতিবেদনগুলি পাওয়া সম্ভব:

অ্যান্ড্রয়েড মার্কেট অ্যাপ্লিকেশনগুলির জন্য নতুন বাগ রিপোর্টিং বৈশিষ্ট্য বিকাশকারীদের তাদের ব্যবহারকারীদের কাছ থেকে ক্র্যাশ এবং জমাট সম্পর্কিত প্রতিবেদনগুলি পেতে সক্ষম করে। প্রতিবেদনগুলি যখন তাদের প্রকাশক অ্যাকাউন্টে লগ ইন করবেন তখন সেগুলি পাওয়া যাবে।

http://developer.android.com/sdk/android-2.2-highlights.html


আমি মনে করি এটি কেবল ২.২ নয়, কেবলমাত্র একটি নতুন বাজার বৈশিষ্ট্য গুগল অফার। আমি কিছুদিন আগে একটি ক্র্যাশপোর্ট পেয়েছি এবং আমার অ্যাপ্লিকেশনটি ব্যবহার করে সেখানে কোনও ফ্রিও ডিভাইস থাকা উচিত নয়।
জানুস

1
@ জানুস আপনি কি নিশ্চিত? কিছু সময়ের জন্য ফ্রয়েও চালাচ্ছেন এমন গুগলারের গণনা না করেই ইতিমধ্যে নেক্সাস ওয়ানের জন্য ফ্রয়েওর প্রকাশনা রয়েছে।
pupeno

অন্তত ফোনে সংস্করণে একটি আপডেট থাকতে হবে, এমনকি এটির মাত্র আরও একটি সংশোধন, তবে অন্যভাবে কীভাবে এই কাজ করা উচিত?
RoflcoptrException

রিপোর্টগুলি গুগলে আগে পাঠানো হয়েছে কিনা জানি না। প্রতিবেদনটি কিছুটা আশ্চর্যজনক কারণ গুগল তাদের ভিডিওগুলি প্রেরণের জন্য একটি ইউআই দেখায় এবং এটি কেবল বাজারে নয়, ওএসেও পরিবর্তন হতে পারে। তবে এটি বলে: প্ল্যাটফর্ম 1 প্রতিবেদনে প্রতি সপ্তাহে রিপোর্ট দেয় এবং ড্রয়েড ফ্রিওতে থাকা উচিত নয়।
জানুস

1
"রিপোর্ট" বাটন কোডটি কিছু সময়ের জন্য এওএসপিতে ছিল এবং কয়েক মাস আগে রোমান গাই (অস্পষ্টভাবে) এ সম্পর্কে একটি প্রশ্নের উত্তর দিয়েছিল।
ক্রিস্টোফার অর

30

এই ব্যতিক্রমগুলির সাথে এটি পরিচালনা করা সম্ভব Thread.setDefaultUncaughtExceptionHandler(), তবে এটি ব্যতিক্রমগুলি পরিচালনা করার অ্যান্ড্রয়েডের পদ্ধতির সাথে বিশৃঙ্খলা দেখা দেয়। আমি এই প্রকৃতির একটি হ্যান্ডলার ব্যবহার করার চেষ্টা করেছি:

private class ExceptionHandler implements Thread.UncaughtExceptionHandler {
    @Override
    public void uncaughtException(Thread thread, Throwable ex){
        Log.e(Constants.TAG, "uncaught_exception_handler: uncaught exception in thread " + thread.getName(), ex);

        //hack to rethrow unchecked exceptions
        if(ex instanceof RuntimeException)
            throw (RuntimeException)ex;
        if(ex instanceof Error)
            throw (Error)ex;

        //this should really never happen
        Log.e(Constants.TAG, "uncaught_exception handler: unable to rethrow checked exception");
    }
}

তবে, ব্যতিক্রমগুলি পুনর্বিবেচনার পরেও আমি পছন্দসই আচরণ পেতে অক্ষম ছিল, অর্থাত্ অ্যান্ড্রয়েডের যে অংশটি ঘটেছে তা বন্ধ করার অনুমতি দেওয়ার পরেও ব্যতিক্রমটি লগইন করেছিলাম, তাই আমি কিছুক্ষণ পরে এটি ছেড়ে দিয়েছি।


আপনি কেন কেবল চেক করা ব্যতিক্রমগুলি পুনরায় নিক্ষেপ করছেন? আমার কাছে মনে হয় আপনার সমস্ত ব্যতিক্রম পুনরায় নিক্ষেপ করা উচিত।
ম্যাট্রিক্সফ্রোগ

দেখে মনে হচ্ছে যে কেউ আপনার পদ্ধতির সাথে সফল হয়েছে: jyro.blogspot.com/2009/09/crash-report-for-android-app.html
ম্যাট্রিক্সফ্রগ

1
কৌশলটি হ'ল পূর্ববর্তী ডিফল্ট আনকডএক্সেপশনহ্যান্ডলারটি পেতে এবং আপনি ব্যতিক্রমটি রিপোর্টিং শেষ করার পরে সেই অবজেক্টটির ব্যতিক্রম পরিচালনা করবেন।
টম

Is Constants.TAGঅ্যান্ড্রয়েড কাঠামোর অংশ? প্রথমবার এটি দেখতে। এটি খুঁজে পাওয়া যায় না বলে মনে হচ্ছে না।
হারুন হাজেম

1
@ হারুনহাজেম আমাদের নিজের নিজস্ব সংজ্ঞা দেওয়া দরকার।
KYHSGeekCode

22

আমি দেখতে পাচ্ছি যে প্রশ্নটি খুব পুরানো, এবং আশা করি আমার উত্তরটি একই সমস্যাযুক্ত অন্যদের জন্য সহায়ক ...

দিন Crashlytics ব্যবহার করে দেখুন। এটি আপনার অ্যাপ্লিকেশনধারী সমস্ত ডিভাইসে সমস্ত ক্র্যাশগুলিতে অনন্য অন্তর্দৃষ্টি দেবে এবং ইমেলের মাধ্যমে আপনাকে একটি বিজ্ঞপ্তি প্রেরণ করবে ... এবং সর্বোত্তম অংশটি এটি সম্পূর্ণরূপে বিনামূল্যে ব্যবহারযোগ্য ..


21

ঠিক আছে, ভাল আমি রেনেন এবং সুনিল থেকে সরবরাহিত নমুনাগুলি দেখেছি এবং আমি এমন একটি সমাধান পেয়েছি যা ত্রুটি পরিচালনার ক্ষেত্রে বিশৃঙ্খলা সৃষ্টি করে না।

আমি কাস্টম এক্সেপশনহ্যান্ডলারটি সংশোধন করেছি যাতে এটি থ্রেড থেকে আমরা নতুনটিকে সংযুক্ত করি সেখান থেকে মূল আনকডএক্সেপশনহ্যান্ডলারটি সঞ্চয় করে। নতুন "অপ্রচলিত ধারণা" এর শেষে - পদ্ধতিটি আমি কেবল সঞ্চিত আনকডএক্সেপশনহ্যান্ডলারটি ব্যবহার করে পুরানো ফাংশনটি কল করি।

DefaultExceptionHandler ক্লাসে আপনার sth প্রয়োজন। এটার মত:

public class DefaultExceptionHandler implements UncaughtExceptionHandler{
  private UncaughtExceptionHandler mDefaultExceptionHandler;

  //constructor
  public DefaultExceptionHandler(UncaughtExceptionHandler pDefaultExceptionHandler)
  {
       mDefaultExceptionHandler= pDefaultExceptionHandler;
  }
  public void uncaughtException(Thread t, Throwable e) {       
        //do some action like writing to file or upload somewhere         

        //call original handler  
        mStandardEH.uncaughtException(t, e);        

        // cleanup, don't know if really required
        t.getThreadGroup().destroy();
  }
}

Http://code.google.com/p/android-remote-stacktrace কোডে এই পরিবর্তনটি সহ আপনার ওয়েবসার্ভারে অথবা এসডি-কার্ডে ক্ষেত্রটিতে লগইন করার জন্য আপনার ভাল কার্যকারিতা রয়েছে।


19

গুগল প্লে ডেভলপারস কনসোল আসলে আপনাকে সেই অ্যাপস থেকে স্ট্যাকের ট্রেস দেয় যা ক্রাশ হয়ে গেছে এবং রিপোর্টগুলি পাঠিয়েছিল, এটি আপনাকে তথ্য দেখতে সহায়তা করার জন্য খুব ভাল চার্ট রয়েছে, নীচের উদাহরণটি দেখুন:

এখানে চিত্র বর্ণনা লিখুন


2
ব্যবহারকারীরা কীভাবে প্রতিবেদনগুলি প্রেরণ করবেন বা আপনার অ্যাপটি প্লে স্টোরে না থাকলে কীভাবে এটি ঠিক কাজ করে, আপনি পরীক্ষার উদ্দেশ্যে এটি করতে পারেন?
সিংহ 789

আপনি কি জানেন যে এমন কোনও ওপেন সোর্স অ্যান্ড্রয়েড প্রকল্প রয়েছে যা তাদের ক্র্যাশ প্রতিবেদনগুলি প্রকাশ করে?
জাস্টিন সিভি

1
দয়া করে নোট করুন, এটি কেবল ক্র্যাশগুলি দেখাবে, এএনআর যা ব্যবহারকারীরা রিপোর্ট করতে বেছে নিয়েছিল
sojin

হ্যাঁ, যাইহোক, আপনার কাছে যদি একটি বড় ব্যবহারকারী বেস থাকে আপনার কাছে সমস্ত ক্র্যাশ হওয়ার অনেক সম্ভাবনা রয়েছে এবং ক্র্যাশগুলি এবং এএনআর এখানে রিপোর্ট করা সবচেয়ে গুরুত্বপূর্ণ হবে, কারণ লোকেরা তাদের আরও বার বার প্রতিবেদন করবে, সুতরাং সেই পথে আপনি পারেন ফিল্টার এবং তাদের সেই অগ্রাধিকার (আরও রিপোর্ট = আরও গুরুত্বপূর্ণ বাগ) যখন (কোন রিপোর্ট = না যে সমালোচনামূলক ত্রুটি নয়) ঠিক করুন।
এফ্রেট

18

আমি আমার অ্যান্ড্রয়েড এবং আইওএস অ্যাপ্লিকেশনগুলির জন্য ক্রিট্রিসিজম ব্যবহার করেছি - টেকক্রাঞ্চে তাদের সম্পর্কে শুনেছি। এখনও পর্যন্ত তাদের সাথে খুব খুশি!


এফওয়াইআই: এনডিকে পক্ষের ক্র্যাশ প্রতিবেদনগুলি মূল পরিকল্পনার অংশ নয়, এবং "বর্ধিত ক্র্যাশ রিপোর্টিং" এর আওতায় আসে। দেখুন: ক্রিট্রিসিজম
আহস

1
আমি কেবলমাত্র টুইটারের ফ্যাব্রিক.আইও ক্র্যাশলিটিক্সে এনডিকে রিপোর্টিং পরীক্ষা করেছি ... বেশ দুর্দান্ত (ব্যবহারের 1 দিন), যখন আমি তাদের সিস্টেমে ম্যাপিংটি প্রকাশ করতে মুক্তি পেলাম তখন একটি অতিরিক্ত পদক্ষেপের প্রয়োজন ছিল যাতে স্ট্যাকের চিহ্নগুলি দেখতে ভাল লাগে, তবে এটি পেরে যায় NDK ত্রুটি আমি পরীক্ষা করতে ব্যবহৃত (তৈরি একটি "পরিত্যাগ ();" কৌশলগতভাবে C ++ সর্বত্র কল এবং এটি পরীক্ষার জন্য একটি স্ট্যাক ট্রেস প্রদান করা হয়েছে।
শিকারী Orionnoir

14

আমি এখানে আমার নিজস্ব সংস্করণ তৈরি করেছি: http://androidblogger.blogspot.com/2009/12/how-to-mprove-your-application-crash.html

এটি মূলত একই জিনিস, তবে আমি প্রতিবেদনটি প্রেরণের জন্য কোনও http সংযোগের পরিবর্তে একটি মেল ব্যবহার করছি এবং আরও গুরুত্বপূর্ণ, আমি আমার প্রতিবেদনে অ্যাপ্লিকেশন সংস্করণ, ওএস সংস্করণ, ফোন মডেল বা উপলভ্য মেমরির মতো কিছু তথ্য যুক্ত করেছি ... ।


11

ব্যতিক্রম বিশদটি ধরতে এটি ব্যবহার করুন:

String stackTrace = Log.getStackTraceString(exception); 

এটি ডাটাবেসে সংরক্ষণ করুন এবং লগ বজায় রাখুন।


কীভাবে সেই ডেটা বেসটি অ্যাক্সেস করবেন, আপনি আমাকে কোনও উদাহরণ দেবেন। আপনি যদি পারেন দয়া করে। অ্যাডাকিনে ধন্যবাদ
রাজেন্দ্র ভার্মা

8

আপনি কেবল গ্রন্থাগারের পরিবর্তে এটির জন্য একটি সম্পূর্ণ (সাধারণ) পরিষেবা ব্যবহার করতে পারেন। আমাদের সংস্থা কেবলমাত্র তার জন্য একটি পরিষেবা প্রকাশ করেছে: http://apphance.com

এটিতে একটি সহজ জাজার লাইব্রেরি রয়েছে (অ্যান্ড্রয়েডের জন্য) যা আপনি 5 মিনিটের মধ্যে সংযুক্ত এবং সংহত করে এবং তারপরে গ্রন্থাগারটি ক্র্যাশ তথ্যগুলি নয় কেবল চলমান অ্যাপ্লিকেশন থেকে লগগুলি সংগ্রহ করে, পাশাপাশি এটি আপনার পরীক্ষকদের ডিভাইস থেকে সরাসরি সমস্যার রিপোর্ট করতে দেয় - সহ পুরো প্রসঙ্গ (ডিভাইস রোটেশন, এটি কোনও ওয়াইফাইয়ের সাথে সংযুক্ত কিনা এবং আরও অনেক কিছু)। আপনি খুব সুন্দর এবং দরকারী ওয়েব প্যানেল ব্যবহার করে লগগুলি দেখতে পারেন, যেখানে আপনি আপনার অ্যাপ্লিকেশন, ক্র্যাশ, লগ, পরিসংখ্যান এবং আরও অনেক কিছু দিয়ে সেশন ট্র্যাক করতে পারেন। পরিষেবাটি এখন বন্ধ বিটা পরীক্ষার পর্যায়ে রয়েছে, তবে আপনি অ্যাক্সেসের জন্য অনুরোধ করতে পারেন এবং আমরা আপনাকে এটি খুব তাড়াতাড়ি দেব give

দাবি অস্বীকার: আমি পলিডিয়ার সিটিও এবং সেবার সহ-নির্মাতা।


7

Stackoverflowএই উত্তরটি খুঁজতে আমাকে সহায়তা করার জন্য উপস্থিত সংস্থানসমূহ ধন্যবাদ ।

আপনি সরাসরি আপনার ইমেলের মাধ্যমে আপনার দূরবর্তী অ্যান্ড্রয়েড ক্রাশ রিপোর্টগুলি খুঁজে পেতে পারেন । স্মরণে রাখুন আপনাকে নিজের ইমেলটি কাস্টম এক্সসেপশনহ্যান্ডলার ক্লাসের মধ্যে রাখতে হবে

public static String sendErrorLogsTo = "tushar.pandey@virtualxcellence.com" ;

প্রয়োজনীয় পদক্ষেপগুলি:

1 ম) আপনার ক্রিয়াকলাপের অনক্রিটেতে আপনার কোডের এই বিভাগটি ব্যবহার করুন।

    if(!(Thread.getDefaultUncaughtExceptionHandler() instanceof CustomExceptionHandler)) {
        Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(this));
    }   

2 য়) আমার পিএইচপিএসক্রিপস অনুসারে (পুনর্বার) কাস্টমএক্সসেপশনহ্যান্ডলার শ্রেণির এই ওভাররাইড সংস্করণটি ব্যবহার করুন।

package com.vxmobilecomm.activity;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.lang.Thread.UncaughtExceptionHandler;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.BufferedHttpEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.AsyncTask;
import android.util.Log;

public class CustomExceptionHandler implements UncaughtExceptionHandler {

    private UncaughtExceptionHandler defaultUEH;
    public static String sendErrorLogsTo = "tushar.pandey@virtualxcellence.com" ;

    Activity activity;

    public CustomExceptionHandler(Activity activity) {
        this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
        this.activity = activity;
    }

    public void uncaughtException(Thread t, Throwable e) {

        final Writer result = new StringWriter();
        final PrintWriter printWriter = new PrintWriter(result);
        e.printStackTrace(printWriter);
        String stacktrace = result.toString();
        printWriter.close();
        String filename = "error" + System.nanoTime() + ".stacktrace";

        Log.e("Hi", "url != null");
        sendToServer(stacktrace, filename);

        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";

        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";

        defaultUEH.uncaughtException(t, e);
    }

    private void sendToServer(String stacktrace, String filename) {
        AsyncTaskClass async = new AsyncTaskClass(stacktrace, filename,
                getAppLable(activity));
        async.execute("");
    }

    public String getAppLable(Context pContext) {
        PackageManager lPackageManager = pContext.getPackageManager();
        ApplicationInfo lApplicationInfo = null;
        try {
            lApplicationInfo = lPackageManager.getApplicationInfo(
                    pContext.getApplicationInfo().packageName, 0);
        } catch (final NameNotFoundException e) {
        }
        return (String) (lApplicationInfo != null ? lPackageManager
                .getApplicationLabel(lApplicationInfo) : "Unknown");
    }

    public class AsyncTaskClass extends AsyncTask<String, String, InputStream> {
        InputStream is = null;
        String stacktrace;
        final String filename;
        String applicationName;

        AsyncTaskClass(final String stacktrace, final String filename,
                String applicationName) {
            this.applicationName = applicationName;
            this.stacktrace = stacktrace;
            this.filename = filename;
        }

        @Override
        protected InputStream doInBackground(String... params) 
        { 
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(
                    "http://suo-yang.com/books/sendErrorLog/sendErrorLogs.php?");

            Log.i("Error", stacktrace);

            try {
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
                        6);

                nameValuePairs.add(new BasicNameValuePair("data", stacktrace));
                nameValuePairs.add(new BasicNameValuePair("to",sendErrorLogsTo));
                nameValuePairs.add(new BasicNameValuePair("subject",applicationName));

                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                HttpResponse response = httpclient.execute(httppost);

                HttpEntity entity1 = response.getEntity();

                BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(
                        entity1);

                is = bufHttpEntity.getContent();

            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return is;
        }

        @Override
        protected void onPostExecute(InputStream result) {
            super.onPostExecute(result);

            Log.e("Stream Data", getStringFromInputStream(is));
        }
    }

    // convert InputStream to String
    private static String getStringFromInputStream(InputStream is) {

        BufferedReader br = null;
        StringBuilder sb = new StringBuilder();

        String line;
        try {

            br = new BufferedReader(new InputStreamReader(is));
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        return sb.toString();

    }
}

6

এখন ফায়ারবেস ক্র্যাশ রিপোর্টগুলি খুব জনপ্রিয় এবং ব্যবহার করা সহজ। আরও তথ্যের জন্য দয়া করে নীচের লিঙ্কটি দেখুন: ফায়ারবেস ক্র্যাশ রিপোর্টিং

আশা করি এটা তোমাকে সাহায্য করবে।


5

এটি অত্যন্ত নিষ্ঠুর, তবে যে কোনও জায়গায় লগক্যাট চালানো সম্ভব, তাই একটি দ্রুত এবং নোংরা হ্যাকটি কোনও ক্যাচ ব্লকে যুক্ত করা হয় getRuntime().exec("logcat >> /sdcard/logcat.log");


এটি সমস্ত অ্যাপ্লিকেশনগুলির লগ আউটপুট দেয়। অ্যাপ্লিকেশন ট্যাগনাম দ্বারা ফিল্টারিং ঠিক আছে তবে এন্ট্রিগুলি সংমিশ্রিত হতে পারে বলে মনে করবেন না এটি যাওয়ার ভাল উপায় be প্রতিটি লেখার পরে লগক্যাট আউটপুট সাফ করা এই সমস্যাটি সমাধান করতে পারে।
বিসচন্দ্রমোহন

5

ফ্যাব্রিক নামে একটি সরঞ্জাম রয়েছে, এটি একটি ক্র্যাশ অ্যানালিটিক সরঞ্জাম, যা অ্যাপ্লিকেশনটি সরাসরি স্থাপন এবং বিকাশের সময় ক্র্যাশ রিপোর্ট পেতে দেয়। আপনার অ্যাপ্লিকেশনটিতে এই সরঞ্জামটি যুক্ত করাও সহজ ছিল .. আপনার অ্যাপ্লিকেশনটি ক্র্যাশ হয়ে গেলে ক্র্যাশের সেই প্রতিবেদনটি আপনার ফ্যাব্রিক.ও ড্যাশবোর্ড থেকে দেখা যাবে। প্রতিবেদনটি স্বয়ংক্রিয়ভাবে ধরা হয়েছিল it এটি ব্যবহারকারীকে অনুমতি চাইবে না। সে / সে বাগ / ক্র্যাশ রিপোর্ট পাঠাতে চায় কিনা। এবং এটি সম্পূর্ণ বিনামূল্যে ... https://get.fabric.io/


5

আপনার ফোনে ক্রাশ / ত্রুটি ডেটা সরবরাহ করার জন্য গুগল ফায়ারবেস গুগলের সর্বশেষ (2016) উপায়। এটি আপনার বিল্ড.gradle ফাইলটিতে অন্তর্ভুক্ত করুন:

compile 'com.google.firebase:firebase-crash:9.0.0'

মারাত্মক ক্র্যাশগুলি ব্যবহারকারীর ইনপুটের প্রয়োজন ছাড়াই স্বয়ংক্রিয়ভাবে লগ হয় এবং আপনি অ-মারাত্মক ক্র্যাশগুলি বা অন্যান্য ইভেন্টগুলিতেও লগ করতে পারেন:

try
{

}
catch(Exception ex)
{
    FirebaseCrash.report(new Exception(ex.toString()));
}

5

শার্লক নামে এই অ্যান্ড্রয়েড লাইব্রেরি রয়েছে । এটি আপনাকে ডিভাইস এবং অ্যাপ্লিকেশন সম্পর্কিত তথ্য সহ ক্র্যাশের সম্পূর্ণ প্রতিবেদন দেয়। যখনই কোনও ক্রাশ ঘটে, এটি বিজ্ঞপ্তি বারে একটি বিজ্ঞপ্তি প্রদর্শন করে এবং বিজ্ঞপ্তিটি ক্লিক করার পরে, এটি ক্র্যাশের বিবরণ খুলবে। ইমেল বা অন্যান্য ভাগ করে নেওয়ার বিকল্পগুলির মাধ্যমে আপনি অন্যের সাথে ক্র্যাশের বিবরণগুলিও ভাগ করতে পারেন।

স্থাপন

android {
    dataBinding {
      enabled = true
    }
}

compile('com.github.ajitsing:sherlock:1.0.0@aar') {
    transitive = true
}

ডেমো

এখানে চিত্র বর্ণনা লিখুন


5

এই পৃষ্ঠায় অনেক উত্তর কার্যকর হলেও তাদের পক্ষে পুরানো হওয়া সহজ। অ্যাপব্রাইনের ওয়েবসাইট পরিসংখ্যানগুলিকে একত্রিত করে যা আপনাকে বর্তমানের সবচেয়ে জনপ্রিয় ক্র্যাশ রিপোর্টিং সমাধান সন্ধান করার অনুমতি দেয়:

অ্যান্ড্রয়েড ক্র্যাশ রিপোর্টিং লাইব্রেরি

অ্যাপ মস্তিষ্ক ওয়েবসাইট

আপনি দেখতে পাচ্ছেন যে এই ছবিটি পোস্ট করার সময় ক্র্যাশলাইটিক্স 5.24% অ্যাপ্লিকেশন এবং 12.38% ইনস্টল ব্যবহার করা হয়।


4

আমরা সংস্থার অভ্যন্তরে আমাদের বাড়তি বর্ধিত সিস্টেমটি ব্যবহার করি এবং এটি আমাদের খুব ভালভাবে পরিবেশন করে। এটি একটি অ্যান্ড্রয়েড লাইব্রেরি যা সার্ভার এবং সার্ভারে ক্র্যাশ প্রতিবেদন পাঠায় যা প্রতিবেদনগুলি গ্রহণ করে এবং কিছু বিশ্লেষণ করে। সার্ভার ব্যতিক্রম নাম, স্ট্যাকট্রেস, বার্তা দ্বারা ব্যাতিক্রম দলগুলি। এটি বেশিরভাগ সমালোচনামূলক সমস্যাগুলি সনাক্ত করতে সহায়তা করে যা সমাধান করা দরকার। আমাদের পরিষেবাটি এখন সর্বজনীন বিটাতে রয়েছে সুতরাং প্রত্যেকে এটি চেষ্টা করতে পারে। আপনি http://watchcat.co এ অ্যাকাউন্ট তৈরি করতে পারেন বা ডেমো অ্যাক্সেস http://watchcat.co/report/index.php?demo ব্যবহার করে কীভাবে এটি কাজ করে তা আপনি কেবল একবার দেখে নিতে পারেন ।


3

আপনি যদি তাত্ক্ষণিক উত্তর চান তবে আপনি লগক্যাট ব্যবহার করতে পারেন

$adb shell logcat -f /sdcard/logoutput.txt *:E

যদি এখনই আপনার লগে খুব বেশি আবর্জনা থাকে তবে প্রথমে এটি পরিষ্কার করার চেষ্টা করুন।

$adb shell logcat -c

তারপরে আপনার অ্যাপ্লিকেশনটি চালানোর চেষ্টা করুন এবং আবার লগক্যাট করুন।


এটির কি এখনও আপনার পিসিতে ডিভাইসটি হুক আপ করার প্রয়োজন নেই (যেমন তারের সাথে)?
জেরার্ড

3

ত্রুটির প্রতিবেদনগুলি ট্র্যাক করার জন্য আমি আরও একটি দুর্দান্ত ওয়েব অ্যাপ্লিকেশন পেয়েছি।

https://mint.splunk.com/

কনফিগার করার জন্য ছোট পদক্ষেপের সংখ্যা।

  1. লগইন করুন বা সাইন আপ করুন এবং উপরের লিঙ্কটি ব্যবহার করে কনফিগার করুন। একবার আপনি কোনও অ্যাপ্লিকেশন তৈরি করে নিলে তারা নীচের মত কনফিগার করার জন্য একটি লাইন সরবরাহ করবে।
Mint.initAndStartSession(YourActivity.this, "api_key");
  1. অ্যাপ্লিকেশনটির build.gradl এ নিম্নলিখিতগুলি যুক্ত করুন।
android {
...
    repositories {
        maven { url "https://mint.splunk.com/gradle/"}
    }
...
}

dependencies {
...
    compile "com.splunk.mint:mint:4.4.0"
...
}
  1. আমরা উপরে যে অনুলিপি করেছিলাম কোডটি যুক্ত করুন এবং এটি প্রতিটি ক্রিয়াকলাপে যুক্ত করুন।

    Mint.initAndStartSession (আপনার ক্রিয়াকলাপ.এটি, "api_key");

এটাই. আপনি লগইন করে আপনার কাছে অ্যাপ্লিকেশন ড্যাশবোর্ডে যান, আপনি সমস্ত ত্রুটির প্রতিবেদন পেয়ে যাবেন।

আশা করি এটি কাউকে সাহায্য করবে।


এটার দাম কত?
ব্যবহারকারী 2966445

2

বিকল্প ক্র্যাশ রিপোর্টিং / ব্যতিক্রম ট্র্যাকিং পরিষেবাটির জন্য রায়গুন.ইও চেক আউট করুন - এটি আপনার অ্যাপ্লিকেশনটিতে প্লাগ ইন করার সময় শালীন ব্যবহারকারীর অভিজ্ঞতা সহ অ্যান্ড্রয়েড ক্র্যাশগুলি পরিচালনা করার জন্য দুর্দান্ত যুক্তি পেয়েছে (আপনার মূল ক্রিয়াকলাপে দুটি লাইনের কোড এবং কয়েকটি এক্সএমএল লাইনগুলি অ্যান্ড্রয়েড ম্যানিফেস্টে আটকানো হয়েছে)।

আপনার অ্যাপ্লিকেশনটি ক্র্যাশ হয়ে গেলে এটি স্বয়ংক্রিয়ভাবে স্ট্যাক ট্রেস, হার্ড / সফ্টওয়্যার, পরিবেশ ট্র্যাকিং সম্পর্কিত তথ্য, আপনার নির্দিষ্ট কোনও কাস্টম ডেটা দখল করবে It এটি এআইপি-তে পোস্ট করে তাই ইউআই থ্রেডকে কোনও ব্লক করে না এবং এটি ক্যাশে করে যদি কোনও নেটওয়ার্ক উপলব্ধ না থাকে তবে ডিস্কে।

দাবি অস্বীকার: আমি অ্যান্ড্রয়েড সরবরাহকারী তৈরি করেছি :)


1

সবেমাত্র ACRA https://github.com/ACRA/acra ব্যবহার করতে গুগল ফর্মগুলি ব্যাকএন্ড হিসাবে ব্যবহার করা শুরু হয়েছে এবং এটি সেটআপ ও ব্যবহার করা খুব সহজ, এটি ডিফল্ট।

কিন্তু গুগল ফর্মগুলিতে পাঠানো প্রতিবেদনগুলি অবমূল্যায়ন করা হবে (তারপরে সরানো হয়েছে): https://plus.google.com/118444843928759726538/posts/GTTgsrEQdN6 https://github.com/ACRA/acra/wiki/Notice-on- গুগল -Form-স্প্রেডশীট-ব্যবহারের

যাইহোক আপনার নিজের প্রেরককে https://github.com/ACRA/acra/wiki/AdvancedUsage#wiki-Implementing_your_own_sender সংজ্ঞায়িত করা সম্ভব আপনি উদাহরণস্বরূপ ইমেল প্রেরণের চেষ্টা করতে পারেন।

ন্যূনতম প্রচেষ্টা দিয়ে বাগসনে প্রতিবেদনগুলি পাঠানো সম্ভব: http://www.bugsense.com/docs/android#acra

এনবি বাগগেস ফ্রি অ্যাকাউন্টটি 500 প্রতিবেদন / মাসে সীমাবদ্ধ


1

পার্টিতে দেরীতে, আমি সমর্থন করি এবং বিশ্বাস করি যে সবার মধ্যে এসিআরএই সেরা বিকল্প। এটি সেটআপ এবং কনফিগার করা সহজ। আমি এসিআরএ ব্যবহার করে ক্র্যাশ প্রতিবেদনটি আনতে এবং ম্যান্ড্রিলএপ ব্যবহার করে আমার ইমেল ঠিকানায় একই মেইল ​​করতে সমস্ত দিক থেকে ইনপুটগুলি সহ একটি বিস্তারিত গাইড তৈরি করেছি।

পোস্টের লিঙ্ক: https://androidician.wordpress.com/2015/03/29/sending-crash-report-with-acra-over-email- using-mandrill/

গিথুবে নমুনা প্রকল্পের লিঙ্ক: https://github.com/ayushhgial/AcraSample


1

আমি বাগসনাগের অন্যতম প্রতিষ্ঠাতা যা আমরা ঠিক এই উদ্দেশ্যে ডিজাইন করেছি। বাগসনাগ অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলিতে স্বয়ংক্রিয়ভাবে ব্যতীত ব্যতিক্রমগুলি ক্যাপচার করে এবং সেগুলি আমাদের ড্যাশবোর্ডে প্রেরণ করে, যেখানে আপনি সংশোধনকে অগ্রাধিকার দিতে এবং ডায়াগোনস্টিক তথ্যতে ডাইভ করতে পারেন।

কিছু কোড স্নিপেট সহ ক্র্যাশ রিপোর্টিং সিস্টেম বাছাই বা নির্মাণের সময় এখানে কয়েকটি গুরুত্বপূর্ণ বিষয় বিবেচনা করতে হবে:

  • আনহ্যান্ডেল ব্যতিক্রমগুলি স্বয়ংক্রিয়ভাবে সনাক্ত করে ( উদাহরণ কোড )
  • মেমরি ব্যবহার, ডিভাইস সম্পর্কিত তথ্য ইত্যাদির মতো ডায়াগনস্টিক ডেটা সংগ্রহ করে ( উদাহরণ কোড )
  • কার্যকরভাবে গোষ্ঠীগুলি মূল কারণে একসাথে ক্র্যাশ হয়
  • আপনাকে পুনরুত্পাদন করতে সহায়তা করতে প্রতিটি ক্রাশের আগে ব্যবহারকারীরা যে পদক্ষেপ নিয়েছিল তা ট্র্যাক করার অনুমতি দেয় ( উদাহরণ কোড )

অ্যান্ড্রয়েডে ক্র্যাশ হ্যান্ডলিং / রিপোর্টিংয়ের আশেপাশের কয়েকটি সেরা অনুশীলন যদি আপনি দেখতে চান তবে আপনি বাগসনাগের ক্র্যাশ রিপোর্টিং লাইব্রেরির পুরো উত্স কোডটি সম্পূর্ণ ওপেন সোর্স যাচাই করতে পারেন, এটিকে ছিঁড়ে ফেলতে এবং নিখরচায় এটি নিজের অ্যাপ্লিকেশনগুলিতে ব্যবহার করতে পারেন!


0

যদি আপনার অ্যাপ্লিকেশনটি অন্য লোকেদের দ্বারা ডাউনলোড করা হচ্ছে এবং দূরবর্তী ডিভাইসগুলিতে ক্রাশ হচ্ছে, আপনি একটি অ্যান্ড্রয়েড ত্রুটি রিপোর্টিং লাইব্রেরিটি দেখতে চাইতে পারেন ( এই এসও পোস্টে রেফারেন্স করা )। যদি এটি কেবলমাত্র আপনার নিজস্ব ডিভাইসে থাকে তবে আপনি লগগ্যাট ব্যবহার করতে পারেন। এমনকি ক্র্যাশ হওয়ার সময় ডিভাইসটি কোনও হোস্ট মেশিনের সাথে সংযুক্ত না থাকলেও, ডিভাইসটি সংযুক্ত করা হয়েছিল এবং একটি অ্যাডবি লগক্যাট কমান্ড জোগানো পুরো লগক্যাট ইতিহাসটি ডাউনলোড করবে (কমপক্ষে যে পরিমাণে এটি বাফার হয়েছে যা সাধারণত লগ ডেটার লুট হয়) , এটি কেবল অসীম নয়)। এই বিকল্পগুলির মধ্যে কোনওটিই কি আপনার প্রশ্নের উত্তর দেয়? না পারলে আপনি কী আরও কিছুটা সন্ধান করছেন তা স্পষ্ট করার চেষ্টা করতে পারবেন না?


0

উদ্দীপনা বিশ্লেষণগুলি আপনাকে ক্র্যাশ তথ্য, হার্ডওয়্যার মডেল, অ্যান্ড্রয়েড সংস্করণ এবং লাইভ অ্যাপ্লিকেশন ব্যবহারের পরিসংখ্যান দেয়। নতুন এসডিকে তারা আরও বিশদ ক্র্যাশ তথ্য সরবরাহ করেছে বলে মনে হচ্ছে http://www.flurry.com/flurry-crash-analytics.html


8
উদ্দীপনা কেবলমাত্র অনেকগুলি অক্ষরে সীমাবদ্ধ এবং আপনাকে কোনও লাইনের নম্বর বা অনুরূপ দেয় না।
ব্রায়ান ডেনি 21

0

গুগল পরিবর্তন করেছে যে আপনি আসলে কত ক্র্যাশ রিপোর্ট পান। পূর্বে আপনি কেবল ম্যানুয়াল রিপোর্ট করা বাগ রিপোর্ট পেয়েছিলেন।

শেষ বিকাশকারী সম্মেলন এবং অ্যান্ড্রয়েড ভিটালসের সূচনা হওয়ার পরে আপনি ডায়াগনস্টিক্স ডেটা ভাগ করতে সক্ষম হওয়া ব্যবহারকারীদের কাছ থেকে ক্র্যাশ প্রতিবেদন পান।

আপনি অ্যান্ড্রয়েড ডিভাইস থেকে সংগ্রহ করা সমস্ত ক্র্যাশ দেখতে পাবেন যার ব্যবহারকারীরা স্বয়ংক্রিয়ভাবে ব্যবহার এবং ডায়াগোনস্টিক্স ডেটা ভাগ করে নেওয়ার পছন্দ করেছেন। আগের দুই মাসের জন্য ডেটা উপলব্ধ।

ক্র্যাশগুলি দেখুন এবং অ্যাপ্লিকেশন (এএনআর) ত্রুটি সাড়া দিচ্ছে না


লগক্যাট বলছে /data/user/0/com। এ একটি আউটপুট ক্র্যাশ ডাম্প ফাইল রয়েছে < এই ফাইল অ্যাক্সেস কিভাবে আউট!
মাইকেল

0

আপনি এটি সরাসরি অ্যান্ড্রয়েড স্টুডিওতে করতে পারেন। কেবল আপনার ফোনটি সংযুক্ত করুন, অ্যাপটি চালান, এটিকে ক্রাশ হতে দিন এবং আপনি সরাসরি অ্যান্ড্রয়েড স্টুডিওতে স্ট্যাকট্রেসটি দেখতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.