خطای FormatError به دلیل Culture سیستم

چند وقتی بود که در مورد برنامه نویسی چیزی ننوشته بودم، دیشب که داشتم هَندی کنترل رو بروزرسانی میکردم و کامیت های آپ استریم رو روی برنچ دولوپ مرج میکردم هنگام تست کردن متوجه شدم که یکی از کامیت های جدید که ویژگی انیمیشن رو به تصاویر جئومتری اضافه میکنه باعث کرش برنامه میشه و خطای FormatError Exception میده دقیقا جایی که برنامه داره تصاویر Geometry رو دریافت و پردازش میکنه.

تصاویر جئومتری همراه انیمیشن
تصاویر جئومتری همراه انیمیشن

قبلا هم روی چندتا پروژه دیگه این مورد رو دیده بودم و روی سیستم من همشون کرش میکردن ولی اصلا تو فکر این نبودم که علت چیه و فیکسش کنم. تا اینکه دیشب با این مشکل روی HC مواجه شدم و مجبور شدم که حلش کنم قبلش مشکل رو به مخزن پروژه گزارش کردم. بعد چند ساعت نبیان یه باگ فیکس کامیت کرد من تست کردم ولی مشکل دوباره پابرجا بود به نبیان اطلاع دادم که باگ فیکس کار نمیکنه. نظر نبیان این بود که این مشکل بخاطر تفاوت فرهنگ (کالچر Culture) در سیستم رایانه ای (ویندوز/زبان) هستش. و همین تفاوت فرهنگی باعث میشه که ویرگول (کاما) توی اون جئومتری جاش رو با اسلش (/) عوض کنه و همین باعث بهم ریختگی فرمت جئومتری و کرش کردن برنامه میشه. و بدلیل اینکه کالچر نبیان روی زبان چینی تنظیم شده (یا انگلیسی دقیق نمیدونم😁) امکان ایجاد باگ و تجزیه تحلیل اون رو نداشت (چون برنامه رو سیستم اون کرش نمیکرد ولی رو سیستم من کرش میکرد) ازون ور هم که ساعت تقریبا 8 شب اینا بود داشتیم صحبت میکردیم نبیان خواست که بدلیل دیروقت بودن این مسئله رو فردا پیگیری کنیم (با کشور چین 3 ساعت و نیم اختلاف ساعت داریم😄 اونا از ما جلوترن سر ساعت میخوابن🤣)

کرش شدن برنامه
کرش شدن برنامه

من هم که یه چیزی بره تو مغزم تا حل نشه دیگه بیرون نمیاد گرچه بدلیل دو شیفت کار کردن تو مدرسه خسته بودم اما شروع کردم به حل کردن این مشکل، اول سعی کردم بصورت دستی اسلش هارو با کاما ها Replace کنم اما این کار جواب نداد بعد از نیم ساعت سروکله زدن بلاخره موفق شدم با یک خط کد این مشکل رو حل کنم. چون این مشکل بدلیل تفاوت فرهنگی رخ میداد، باید کاری میکردم که برنامه، فرهنگ رو از فرهنگ تنظیم شده سیستم نخونه و بجاش بیاد فرهنگ مشخصی رو برای برنامه لود کنه. با کد زیر فرهنگ استاندارد که همون انگلیسی هستش رو برای برنامه تنظیم کردم و مشکل براحتی حل شد.

Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;

خلاصه اینکه برنامه نویسی خیلی لذت بخش و جالبه و گاهی آدم با مشکلاتی روبرو میشه که اصلا فکرش رو هم نمیکنه که منشا خطا چی میتونه باشه تو این مشکل من اول دنبال اصلاح کردن فرمت جئومتری بودم ولی بعد متوجه شدم که هرچقدر هم فرمت رو اصلاح کنم باز این بهم ریختگی بوجود میاد که ریشه تو تنظیمات ویندوز داره.

خلاصه بعد از حل کردن مشکل یه PR زدم و رو پروژه مرج شد.