ব্যতিক্রম কোড "EXC_I386_GPFLT" এর অর্থ কী?


117

ব্যতিক্রম কোডটির অর্থ কী EXC_I386_GPFLT?

এর অর্থ পরিস্থিতি অনুসারে কি আলাদা হয়?

সেক্ষেত্রে আমি EXC_BAD_ACCESSব্যতিক্রম কোড সহ ব্যতিক্রম প্রসঙ্গটি উল্লেখ করছিEXC_I386_GPFLT

প্রোগ্রামটি এক্সকোড 5.0.1-এ বিকাশ করা হয়েছে, cblas_zgemm()বিএলএএস লাইব্রেরি নিয়ে কাজ করে ((ভাল, আমি অনুমান করি এটির কোনও গুরুত্ব নেই ...)

আপনাকে অনেক ধন্যবাদ!

উত্তর:


112

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

দুর্ভাগ্যক্রমে সমস্যাটি আরও প্রসঙ্গ ছাড়াই ঠিক কী আছে তা নির্ধারণ করা শক্ত হতে পারে, আমার এএমডি Program৪ প্রোগ্রামারের ম্যানুয়ালে ২০০ 2005 সাল থেকে ২ য় খণ্ড তালিকাভুক্ত রয়েছে - সমস্ত অ্যাকাউন্টের দ্বারা, সম্ভবত 8 বছর পরে কিছু যুক্ত করা হয়েছিল আরও অনেক কিছু।

যদি এটি একটি -৪-বিট সিস্টেম হয় তবে একটি দুর্ভাগ্যজনক দৃশ্যাবলীটি হ'ল আপনার কোডটি "নন-ক্যানোনিকাল পয়েন্টার" ব্যবহার করছে - যার অর্থ 64৪-বিট ঠিকানা এমনভাবে তৈরি করা হয়েছে যাতে ঠিকানার উপরের ১ b বিটগুলি না থাকে নীচের 48 বিটের শীর্ষের সমস্ত অনুলিপি (অন্য কথায়, ঠিকানার 16 শীর্ষে 16 বিটের নীচে বিটের উপর ভিত্তি করে কোনও ঠিকানার 16 টি বা 1 হওয়া উচিত)। এই নিয়মটি গ্যারান্টি দেওয়ার জন্য স্থানে রয়েছে যে আর্কিটেকচারটি "ঠিকানা সীমার মধ্যে বৈধ বিটের সংখ্যা নিরাপদে প্রসারিত করতে পারে"। এটি নির্দেশ করবে যে কোডটি হয় অন্য পদার্থের সাথে কিছু পয়েন্টার ডেটা ওভাররাইট করছে বা কিছু পয়েন্টার মান পড়ার পরে সীমা ছাড়িয়ে যাচ্ছে।

আর একটি সম্ভাব্য কারণ হ'ল এসএসই রেজিস্টারের সাথে অ-স্বাক্ষরিত অ্যাক্সেস - অন্য কথায়, কোনও 16-বাইট প্রান্তিক নয় এমন ঠিকানা থেকে 16 বাইট এসএসই রেজিস্টার পড়া।

যেমনটি আমি বলেছি, অন্যান্য অনেকগুলি সম্ভাব্য কারণ রয়েছে, তবে বেশিরভাগের মধ্যে এমন কিছু রয়েছে যা "নর্মাল" কোডটি 32- বা 64-বিট ওএসে করবে না (যেমন অবৈধ নির্বাচক সূচকের সাথে সেগমেন্টের রেজিস্ট্রেশন লোড করা বা লিখিত হওয়া) এমএসআর এর (মডেল নির্দিষ্ট রেজিস্টার))


24

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

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



23

আপনি প্রায়শই হেডার ফাইলগুলি থেকে তথ্য পেতে পারেন। উদাহরণ স্বরূপ:

$ cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk
$ find usr -name \*.h -exec fgrep -l EXC_I386_GPFLT {} \;
usr/include/mach/i386/exception.h
^C
$ more usr/include/mach/i386/exception.h
....
#define EXC_I386_GPFLT          13      /* general protection fault     */

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

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

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


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

16

আমি ভাবলাম কেন আমার ইউনিট পরীক্ষার সময় এটি উপস্থিত হয়েছিল।

আমি একটি প্রোটোকলে একটি পদ্ধতি ঘোষণা যুক্ত করেছি যা এতে অন্তর্ভুক্ত throws; তবে সম্ভাব্য নিক্ষেপ পদ্ধতিটি সেই নির্দিষ্ট পরীক্ষায় ব্যবহার করা হয়নি। পরীক্ষায় জোম্বগুলি সক্ষম করা খুব বেশি সমস্যার মতো মনে হয়েছিল।

একটি cleanK ক্লিনটি চালিয়ে গেছে did আমি যখন সর্বদা প্রকৃত সমস্যাগুলি সমাধান করি তখন আমি সর্বদা উদ্বেলিত।


এটি সুইফটে আমার জন্য এটিও স্থির করে দিয়েছে। ধন্যবাদ!
lwdthe1

8

আমি সুইফট ৪.২ এ একইরকম ব্যতিক্রম করেছি। আমি আমার কোডটিতে একটি বাগ খুঁজতে চেষ্টা করে প্রায় আধা ঘন্টা ব্যয় করেছি, তবে এক্সকোডটি বন্ধ করে এবং প্রাপ্ত ডেটা ফোল্ডারটি সরিয়ে দেওয়ার পরে সমস্যাটি চলে গেছে। শর্টকাটটি এখানে:

rm -rf ~/Library/Developer/Xcode/DerivedData

2

আমার ক্ষেত্রে আইওএস সিমুলেটারে একটি অ্যাপ্লিকেশন চালানোর সময় ত্রুটিটি এক্সকোডে ফেলে দেওয়া হয়েছিল। যদিও আমি "ত্রুটিটির অর্থ কী" এর নির্দিষ্ট প্রশ্নের উত্তর দিতে পারি না, তবে আমি কী বলতে পারি তা আমাকে বলতে পারে, সম্ভবত এটি অন্যকেও সহায়তা করে helps

আমার জন্য সমাধানটি ছিল Erase All Content and Settingsসিমুলেটর এবং Clean Build Folder...এক্সকোডে।


1

একটি ভিউ ছেড়ে যাওয়ার সময় আমার এই সমস্যাটি ছিল (আগের দৃশ্যে ফিরে পপ করুন)।

কারণ ছিল

addSubview(view)
view.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
    view.leadingAnchor.constraint(equalTo: safeAreaLayoutGuide.leadingAnchor),
    view.topAnchor.constraint(equalTo: safeAreaLayoutGuide.topAnchor),
    view.trailingAnchor.constraint(equalTo: safeAreaLayoutGuide.trailingAnchor),
    view.bottomAnchor.constraint(equalTo: safeAreaLayoutGuide.bottomAnchor)
])

পরিবর্তন safeAreaLayoutGuideকরার জন্য selfসমস্যা সমাধানের।

অর্থ তদারকির শীর্ষস্থানীয়, অনুসরণযোগ্য, নিরাপদ অঞ্চলের পরিবর্তে শীর্ষ, নীচে দিয়ে দৃশ্যটি সারিবদ্ধ করে)


0

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

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


0

যদি ত্রুটিটি এমন কোনও ক্লোজারের মধ্যে ফেলে দেওয়া হয় যা selfহিসাবে সংজ্ঞায়িত হয় তবে unownedআপনি যেটি অ্যাক্সেস করতে পারবেন তাতে সীমাবদ্ধ থাকতে পারেন এবং নির্দিষ্ট পরিস্থিতিতে এই ত্রুটি কোডটি পাবেন। বিশেষ করে ডিবাগ করার সময়। এই যদি হয় তাহলে জন্য আপনাকে পরিবর্তনের চেষ্টা [unowned self]করতে[weak self]


0

এটি করার সময় আমি এই ত্রুটি পেয়েছি:

 NSMutableDictionary *aDictionary=[[NSMutableDictionary alloc] initWithObjectsAndKeys:<#(nonnull id), ...#>, nil]; //with 17 objects and keys

আমি ফিরে গেলে এটি চলে গেল:

NSMutableDictionary *aDictionary=[[NSMutableDictionary alloc] init];
[aDictionary setObject:object1 forKey:@"Key1"]; //17 times

0

আমার কাছে এটি স্টোরিবোর্ড সম্পর্কিত ইস্যুতে আইওএস 9.0 সেট এবং পরে আইওএস 10.0 এবং তার পরে সেট করার জন্য ভিউকন্ট্রোলার বিল্ডের বিকল্প রয়েছে। আসলে আমি ভেরিটি 10 ​​থেকে আইওএস 9.3 এ ডাউনগ্রেড করতে চাই।

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