ক্র্যাশ লগের প্রতীক হিসাবে এই উত্তরগুলি এখানে পড়ার পরে (এবং শেষ পর্যন্ত সফল) আমি মনে করি যে এখানে কিছু পয়েন্ট নিখোঁজ রয়েছে যা প্রতীকী ক্র্যাশের অনুরোধ কেন প্রতীকী আউটপুট উত্পাদন করে না তা নির্ধারণ করার জন্য এটি গুরুত্বপূর্ণ important
ক্র্যাশ লগের প্রতীক হিসাবে 3 টি সম্পদ একসাথে ফিট করতে হবে:
- ক্র্যাশ লগ ফাইল নিজেই (অর্থাত্
example.crash
), হয় এক্সকোডের সংগঠক থেকে রফতানি হয়েছে বা আইটিউনস কানেক্ট থেকে প্রাপ্ত হয়েছে।
.app
প্যাকেজ (অর্থাত example.app
) যে নিজেই ক্র্যাশ লগ একাত্মতার অ্যাপ্লিকেশন বাইনারি ধারণ করে। আপনার যদি .ipa
প্যাকেজ থাকে (অর্থাত্ example.ipa
) তবে আপনি .app
প্যাকেজটি আনজিপ করে .ipa
(যেমন unzip example.ipa
) প্যাকেজটি বের করতে পারবেন । এরপরে .app
প্যাকেজটি নিষ্ক্রিয় অবস্থায় থাকেPayload/
ফোল্ডারে থাকে।
.dSYM
প্যাকেজ ডিবাগ চিহ্ন ধারণকারী (অর্থাত example.app.dSYM
)
প্রতীক শুরু করার আগে আপনার যাচাই করা উচিত ar সমস্ত নিদর্শনগুলি মিলছে কিনা, যার অর্থ ক্র্যাশ লগটি আপনার কাছে থাকা বাইনারি সম্পর্কিত এবং ডিবাগ প্রতীকগুলি সেই বাইনারি তৈরির সময় উত্পাদিত হয়েছে।
প্রতিটি বাইনারি একটি ইউইউডি দ্বারা উল্লেখ করা হয় যা ক্র্যাশ লগ ফাইলে দেখা যায়:
...
Binary Images:
0xe1000 - 0x1f0fff +example armv7 <aa5e633efda8346cab92b01320043dc3> /var/mobile/Applications/9FB5D11F-42C0-42CA-A336-4B99FF97708F/example.app/example
0x2febf000 - 0x2fedffff dyld armv7s <4047d926f58e36b98da92ab7a93a8aaf> /usr/lib/dyld
...
এই নির্যাস সালে ক্র্যাশ লগ UUID সঙ্গে একটি অ্যাপ্লিকেশন বাইনারি ইমেজ নামে example.app/example জন্যে aa5e633efda8346cab92b01320043dc3
।
আপনি বামনডাম্পের সাথে বাইনারি প্যাকেজের ইউআইডি পরীক্ষা করতে পারেন:
dwarfdump --uuid example.app/example
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app/example
এর পরে আপনার যা ডিবাগ প্রতীকগুলিও সেই বাইনারিটির অন্তর্ভুক্ত তা পরীক্ষা করা উচিত:
dwarfdump --uuid example.app.dSYM
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app.dSYM/Contents/Resources/DWARF/example
এই উদাহরণে সমস্ত সম্পদ একসাথে ফিট করে এবং আপনার স্ট্যাকট্র্যাসের প্রতীক করতে সক্ষম হওয়া উচিত।
থেকে কার্যধারা symbolicatecrash
স্ক্রিপ্ট:
এক্সকোড ৮.৩ এ আপনার মাধ্যমে স্ক্রিপ্টটি চালু করা উচিত
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash -v example.crash 2> symbolicate.log
এটি সেখানে না থাকলে আপনি find . -name symbolicatecrash
এটি খুঁজে পেতে আপনার Xcode.app ডিরেক্টরিতে চালাতে পারেন।
আপনি দেখতে পাচ্ছেন যে এখানে আর কোনও পরামিতি দেওয়া হয়নি। সুতরাং স্ক্রিপ্টটি স্পটলাইট অনুসন্ধান চালিয়ে আপনার অ্যাপ্লিকেশন বাইনারি এবং ডিবাগ প্রতীকগুলি সন্ধান করতে হবে। এটি একটি নির্দিষ্ট সূচক নামে ডাবল প্রতীক অনুসন্ধান করে com_apple_xcode_dsym_uuids
। আপনি এই অনুসন্ধানটি নিজেই করতে পারেন:
mdfind 'com_apple_xcode_dsym_uuids = *'
রেস্প।
mdfind "com_apple_xcode_dsym_uuids == AA5E633E-FDA8-346C-AB92-B01320043DC3"
প্রথম স্পটলাইট অনুরোধ আপনাকে সমস্ত ইনডেক্সড ডিএসওয়াইএম প্যাকেজ দেয় এবং দ্বিতীয়টি আপনাকে .dSYM
নির্দিষ্ট ইউআইডি সহ প্যাকেজ দেয় । স্পটলাইট যদি আপনার .dSYM
প্যাকেজটি না খুঁজে পায় তবে তাও symbolicatecrash
পাবে না। আপনি যদি এই সমস্ত স্টাফ করেন তবে আপনার একটি সাবফোল্ডারে~/Desktop
স্পটলাইটের সবকিছু খুঁজে পেতে সক্ষম হবেন।
যদি symbolicatecrash
আপনার .dSYM
প্যাকেজটি খুঁজে পায় তবে নীচের মতো একটি লাইন থাকা উচিত symbolicate.log
:
@dsym_paths = ( <SOME_PATH>/example.app.dSYM/Contents/Resources/DWARF/example )
আপনার .app
প্যাকেজটি সন্ধানের জন্য নীচের মত একটি স্পটলাইট অনুসন্ধান সন্ধান করা হয়েছে symbolicatecrash
:
mdfind "kMDItemContentType == com.apple.application-bundle && (kMDItemAlternateNames == 'example.app' || kMDItemDisplayName == 'example' || kMDItemDisplayName == 'example.app')"
যদি symbolicatecrash
আপনার .app
প্যাকেজটি খুঁজে পায় তবে নীচের এক্সট্রাক্টটি এখানে থাকতে হবে symbolicate.log
:
Number of symbols in <SOME_PATH>/example.app/example: 2209 + 19675 = 21884
Found executable <SOME_PATH>/example.app/example
-- MATCH
যদি এই সমস্ত সংস্থানগুলি পাওয়া যায় symbolicatecrash
তবে আপনার ক্র্যাশ লগের প্রতীকী সংস্করণটি মুদ্রণ করা উচিত।
যদি না হয় তবে আপনি সরাসরি আপনার ডিএসওয়াইএম এবং। অ্যাপ্লিকেশনগুলিতে পাস করতে পারেন।
symbolicatecrash -v --dsym <SOME_PATH>/<App_URI>.app.dSYM/<APP_NAME>.app.dsym <CRASHFILE> <SOME_OTHER_PATH>/<APP_NAME>.app/<APP_NAME> > symbolicate.log
দ্রষ্টব্য: প্রতীকী ব্যাকট্রেস টার্মিনালে আউটপুট হবে না symbolicate.log
।
symbolicatecrash
কমান্ডটি কোথায় সন্ধান করতে হবে , কীভাবে এটি ব্যবহার করতে হবে এবং প্রতীকটি করতে কীভাবে ডিএসওয়াইএম ফাইলটি সন্ধান করতে হবে তা আমি তালিকাবদ্ধ করেছি।