অ্যান্ড্রয়েড - আমি কীভাবে একটি এএনআর তদন্ত করব?


152

আমার অ্যাপটি কোথায় এএনআর ছুড়েছিল (অ্যাপ্লিকেশন সাড়া দিচ্ছে না) তা খুঁজে পাওয়ার কোনও উপায় আছে কি? আমি / ডেটাতে ট্রেস.টেক্সট ফাইলটি একবার দেখেছি এবং আমি আমার অ্যাপ্লিকেশনটির জন্য একটি চিহ্ন খুঁজে পেয়েছি। এটি আমি ট্রেসটিতে দেখতে পাচ্ছি।

DALVIK THREADS:
"main" prio=5 tid=3 TIMED_WAIT
  | group="main" sCount=1 dsCount=0 s=0 obj=0x400143a8
  | sysTid=691 nice=0 sched=0/0 handle=-1091117924
  at java.lang.Object.wait(Native Method)
  - waiting on <0x1cd570> (a android.os.MessageQueue)
  at java.lang.Object.wait(Object.java:195)
  at android.os.MessageQueue.next(MessageQueue.java:144)
  at android.os.Looper.loop(Looper.java:110)
  at android.app.ActivityThread.main(ActivityThread.java:3742)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:515)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:497)
  at dalvik.system.NativeStart.main(Native Method)

"Binder Thread #3" prio=5 tid=15 NATIVE
  | group="main" sCount=1 dsCount=0 s=0 obj=0x434e7758
  | sysTid=734 nice=0 sched=0/0 handle=1733632
  at dalvik.system.NativeStart.run(Native Method)

"Binder Thread #2" prio=5 tid=13 NATIVE
  | group="main" sCount=1 dsCount=0 s=0 obj=0x433af808
  | sysTid=696 nice=0 sched=0/0 handle=1369840
  at dalvik.system.NativeStart.run(Native Method)

"Binder Thread #1" prio=5 tid=11 NATIVE
  | group="main" sCount=1 dsCount=0 s=0 obj=0x433aca10
  | sysTid=695 nice=0 sched=0/0 handle=1367448
  at dalvik.system.NativeStart.run(Native Method)

"JDWP" daemon prio=5 tid=9 VMWAIT
  | group="system" sCount=1 dsCount=0 s=0 obj=0x433ac2a0
  | sysTid=694 nice=0 sched=0/0 handle=1367136
  at dalvik.system.NativeStart.run(Native Method)

"Signal Catcher" daemon prio=5 tid=7 RUNNABLE
  | group="system" sCount=0 dsCount=0 s=0 obj=0x433ac1e8
  | sysTid=693 nice=0 sched=0/0 handle=1366712
  at dalvik.system.NativeStart.run(Native Method)

"HeapWorker" daemon prio=5 tid=5 VMWAIT
  | group="system" sCount=1 dsCount=0 s=0 obj=0x4253ef88
  | sysTid=692 nice=0 sched=0/0 handle=1366472
  at dalvik.system.NativeStart.run(Native Method)

----- end 691 -----

সমস্যাটি কীভাবে আমি জানতে পারি? ট্রেসের পদ্ধতিগুলি সমস্ত এসডিকে পদ্ধতি।

ধন্যবাদ।


2
আমার এই ধরণের একটি প্রতিবেদন আছে, যা ঘটছে android.os.MessageQueue.nativePollOnce(Native Method)। আমি কি এটিকে নিরাপদে উপেক্ষা করতে পারি?
আরডিএস

উত্তর:


124

কিছু মূল অপারেশন "মূল" থ্রেডে সঞ্চালিত হলে একটি এএনআর হয় happens এটি ইভেন্ট লুপের থ্রেড এবং এটি যদি ব্যস্ত থাকে তবে অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে আরও কোনও জিইউআই ইভেন্টগুলি প্রক্রিয়া করতে পারে না এবং এইভাবে একটি এএনআর ডায়ালগটি ছুঁড়ে দেয়।

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

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


6
একমাত্র ইস্যুটি "এএনআর পুনরুত্পাদন" :-)। আপনি কি দয়া করে ব্যাখ্যা করতে পারেন যে স্ট্যাক ট্রেস শোয়ের মূল থ্রেডটি কীভাবে 'ইডলিং' হয়, তা দুর্দান্ত।
ব্লুন্ডেল

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

3
@ সুনিল হাই আপনি কি জানেন যে বাইন্ডার থ্রেড 3, বাইন্ডার থ্রেড 2 জেডিডাব্লুপি ডেভেন প্রিও 5 এর মতো বাকী অংশগুলির অর্থ কী, এসকাউন্ট, ডিএসকাউন্ট, অবজেক্ট, সিএসটিড, দুর্দান্ত সময়সূচীর অর্থ কী। এটা VMWAIT, runnable, নেটিভ মত তথ্য রয়েছে
মিনহাজ

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

6
আউটপুটটির একটি ভাল ব্যাখ্যার জন্য elliotth.blogspot.com/2012/08/… দেখুন ।
শীঘ্রই

96

আপনি 9 বা ততোধিকের API স্তরে স্ট্রাইকডমড সক্ষম করতে পারেন ।

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

public void onCreate() {
    StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                           .detectAll()
                           .penaltyLog()
                           .penaltyDeath()
                           .build());
    super.onCreate();
}

ব্যবহার penaltyLog()আপনি এডিবি Logcat আউটপুট যখন আপনি লঙ্ঘনের দেখতে তাদের বিষয়ে আপনার অ্যাপ্লিকেশন ব্যবহার দেখতে পারেন।


স্ট্রাইকমোড কোনও ধরণের সমাধান করা যায় না। আমার প্রথমে আমদানি করার দরকার কি কিছু আছে? CTRL + SHIFT + O টিপুন সাহায্য করে না।
কুচি

23
ছোট্ট টিপ - উত্পাদনে অন্তর্ভুক্তি রোধ করতে যদি (বিল্ডকনফিগ.এইডিইউবি) ব্যবহার করুন
আমির উবাল

@ উওল "প্রযোজনায় অন্তর্ভুক্তি রোধ" বলতে কী বোঝাতে চেয়েছেন? !!
মুহাম্মদ রেফায়াত

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

1
@ মুহম্মেদ রেফাত আপনার প্রশ্নের সাথে আমার উত্তর যুক্ত করেছে।
আমির উয়াল

80

আপনি ভাবছেন যে কোন টাস্কটি ইউআই থ্রেড ধারণ করে। ট্রেস ফাইল আপনাকে টাস্কটি সন্ধান করার জন্য একটি ইঙ্গিত দেয়। আপনার প্রতিটি থ্রেডের একটি অবস্থা তদন্ত করতে হবে

থ্রেডের রাজ্য

  • চলমান - অ্যাপ্লিকেশন কোড নির্বাহ করে
  • ঘুম - যাকে বলে থ্রেড.স্লিপ ()
  • মনিটর - একটি মনিটর লক অর্জনের জন্য অপেক্ষা
  • অপেক্ষা করুন - অবজেক্ট.ওয়েটে ()
  • নেটিভ - নেটিভ কোড কার্যকর করছে
  • vmwait - একটি ভিএম রিসোর্সের অপেক্ষায়
  • জম্বি - থ্রেডটি মারা যাওয়ার প্রক্রিয়াধীন রয়েছে
  • সূচনা - থ্রেড শুরু হচ্ছে (আপনার এটি দেখা উচিত নয়)
  • শুরু হচ্ছে - থ্রেড শুরু হতে চলেছে (আপনার এটিও দেখা উচিত নয়)

সাসপেন্ডেড, মনিটরের রাজ্যে ফোকাস করুন। মনিটরের রাজ্যটি বোঝায় যে কোন থ্রেডটি তদন্ত করা হয়েছে এবং থ্রেডের সাসপেন্ডেড অবস্থা সম্ভবত অচলাবস্থার মূল কারণ।

বেসিক তদন্ত পদক্ষেপ

  1. "লক করার অপেক্ষায়" সন্ধান করুন
    • আপনি মনিটরের রাজ্য "বাইন্ডার থ্রেড # 15" প্রিও = 5 টিড = 75 মনিটর পেতে পারেন
    • "লক করার অপেক্ষায়" খুঁজে পেলে আপনি ভাগ্যবান
    • উদাহরণস্বরূপ: থ্রেডিড = 74 দ্বারা রাখা <0xblahblah> (একটি com.foo.A) লক করার জন্য অপেক্ষা করা
  2. আপনি লক্ষ্য করতে পারেন যে "tid = 74" এখন একটি কাজ করে hold সুতরাং জোয়ার = 74 এ যান
  3. জোয়ার = 74 সম্ভবত রাষ্ট্রের বরখাস্ত! মূল কারণ সন্ধান করুন!

ট্রেস সর্বদা "লক করার অপেক্ষায়" থাকে না। এই ক্ষেত্রে এটি প্রধান কারণ খুঁজে পাওয়া কঠিন।


1
সুন্দর ব্যাখ্যা। এখন আমার পক্ষে এএনআর লগগুলি বোঝা আরও সহজ। তবে এখনও আমার কারণ বুঝতে সমস্যা হয়েছে কারণ পদক্ষেপ 1 এ আমি সহজেই থ্রেড আইডিটি সন্ধান করতে সক্ষম হলাম তবে যখন পদক্ষেপ 2 এ, আমি যেখানে সেখানে ছিলাম, রাষ্ট্রটি যাচাই করতে চেষ্টা করব তবে আমি এটি খুঁজে পাচ্ছি না । এটি নিয়ে কীভাবে এগিয়ে যাবেন কোনও ধারণা?
THZ

1
আমার - waiting to lock an unknown objectভিতরে আছে "HeapTaskDaemon" daemon prio=5 tid=8 Blocked । এর অর্থ কী কেউ সাহায্য করতে পারে?
হিলাল

13

আমি গত কয়েক মাস ধরে অ্যান্ড্রয়েড শিখছি, তাই আমি একজন বিশেষজ্ঞের থেকে অনেক দূরে, তবে এএনআরএসের নথিপত্র নিয়ে আমি সত্যিই হতাশ হয়েছি।

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

এএনআর লগ সহ আপনার তিনটি জিনিস সন্ধান করতে হবে।

1) ডেডলকস: যখন কোনও থ্রেড WAIT অবস্থায় থাকে তখন আপনি এটি "হোল্ডবাই =" কে তা খুঁজে বের করার জন্য বিশদটি সন্ধান করতে পারেন। বেশিরভাগ সময়, এটি নিজেই ধরে রাখা হবে, তবে এটি যদি অন্য থ্রেড দ্বারা ধরে রাখা হয় তবে এটি সম্ভবত একটি বিপদজনক চিহ্ন। এই থ্রেডটি দেখুন এবং দেখুন এটি কী রেখেছে। আপনি একটি লুপ খুঁজে পেতে পারেন, যা একটি পরিষ্কার লক্ষণ যে কিছু ভুল হয়েছে। এটি বেশ বিরল, তবে এটি প্রথম বিষয় কারণ এটি যখন ঘটে তখন এটি একটি দুঃস্বপ্ন

২) মূল থ্রেড অপেক্ষারত: যদি আপনার মূল থ্রেডটি ওয়েট অবস্থায় থাকে তবে এটি অন্য থ্রেডের কাছে রাখা হয়েছে কিনা তা পরীক্ষা করে দেখুন। এটি হওয়া উচিত নয়, কারণ আপনার ইউআই থ্রেডটি কোনও পটভূমির থ্রেড দ্বারা রাখা উচিত নয়।

এই উভয় পরিস্থিতিতে, এর অর্থ আপনার কোডটি উল্লেখযোগ্যভাবে পুনরায় কাজ করা দরকার।

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

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


4

আপনি যখনই সময় সংক্রান্ত সমস্যাগুলি বিশ্লেষণ করছেন, ডিবাগিং প্রায়শই সহায়তা করে না, কারণ ব্রেকআপপয়েন্টে অ্যাপ্লিকেশন হিমাচলে সমস্যা দূর হয়ে যায়।

আপনার সেরা বেট হ'ল অ্যাপের বিভিন্ন থ্রেড এবং কলব্যাকগুলিতে প্রচুর লগিং কল (লগ.এক্সএক্সএক্সএক্স ()) inোকানো এবং কোথায় দেরি হচ্ছে তা দেখুন। আপনার যদি স্ট্যাকট্রিজের প্রয়োজন হয় তবে একটি নতুন ব্যতিক্রম তৈরি করুন (কেবল একটি ইনস্ট্যান্টিয়েট করুন) এবং এটি লগ করুন।


2
আপনার যদি স্ট্যাকট্রেস প্রয়োজন হয় তবে একটি নতুন ব্যতিক্রম তৈরি করার পরামর্শের জন্য ধন্যবাদ। যে খুবই সহায়ক যখন ডিবাগ :)
কুচি

3

কী ট্রিগারস এএনআর?

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

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

কীভাবে এএনআরগুলি এড়ানো যায়

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

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

কোড: অ্যাসিঙ্কটাস্ক ক্লাস সহ কর্মী থ্রেড

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
    // Do the long-running work in here
    protected Long doInBackground(URL... urls) {
        int count = urls.length;
        long totalSize = 0;
        for (int i = 0; i < count; i++) {
            totalSize += Downloader.downloadFile(urls[i]);
            publishProgress((int) ((i / (float) count) * 100));
            // Escape early if cancel() is called
            if (isCancelled()) break;
        }
        return totalSize;
    }

    // This is called each time you call publishProgress()
    protected void onProgressUpdate(Integer... progress) {
        setProgressPercent(progress[0]);
    }

    // This is called when doInBackground() is finished
    protected void onPostExecute(Long result) {
        showNotification("Downloaded " + result + " bytes");
    }
}

কোড: কর্মী থ্রেড কার্যকর করুন

এই কর্মী থ্রেডটি কার্যকর করতে, কেবল একটি উদাহরণ তৈরি করুন এবং এক্সিকিউট (()) কল করুন

new DownloadFilesTask().execute(url1, url2, url3);

উৎস

http://developer.android.com/training/articles/perf-anr.html


1

এএনআর নিয়ে আমার সমস্যা, অনেক কাজ করার পরে আমি জানতে পারলাম যে একটি থ্রেড এমন একটি সংস্থান আহ্বান করছে যা বিন্যাসে উপস্থিত ছিল না, ব্যতিক্রম প্রত্যাবর্তনের পরিবর্তে, আমি এএনআর পেয়েছি ...


এটি অত্যন্ত অদ্ভুত
নীলবজা


0

@ হোরিউন লি উত্তর সম্পর্কে বেসিক, এএনআর থেকে তদন্ত করতে সহায়তা করার জন্য আমি একটি ছোট অজগর লিপি লিখেছিলাম wrotetraces.txt

graphvizআপনি যদি grapvhvizআপনার সিস্টেমে ইনস্টল করে থাকেন তবে এএনআর গ্রাফিক্স হিসাবে আউটপুট আসবে ।

$ ./anr.py --format png ./traces.txt

একটি পিএনজি নীচে যেমন আউটপুট আসবে যদি ফাইলটিতে এএনআর পাওয়া যায় traces.txt। এটি আরও স্বজ্ঞাত।

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

traces.txtউপরে ব্যবহৃত নমুনা ফাইলটি এখান থেকে পাওয়া গেল ।


0

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

মনে রাখবেন যে আপনার গুগল প্লে বিকাশকারী কনসোলে প্রেরিত স্ট্যান্ডার্ড এএনআর রিপোর্টগুলি প্রায়শই সঠিক সমস্যাটি চিহ্নিত করতে পর্যাপ্ত সঠিক হয় না। এজন্য তৃতীয় পক্ষের লাইব্রেরি প্রয়োজন।

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