غريبة البرنامج شنق, ماذا يعني هذا في التصحيح ؟
-
03-07-2019 - |
سؤال
غريبة البرنامج شنق, ماذا يعني هذا في التصحيح ؟
بعد ربط windbg وجدت ما يلي:
(1714.258): Access violation - code c0000005 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. eax=015b5c74 ebx=178a13e0 ecx=dddddddd edx=009a8ca0 esi=09fbf698 edi=09fbf594 eip=005ae2f7 esp=09fbf4a4 ebp=09fbf594 iopl=0 nv up ei ng nz na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010286 TestApplication!std::_Container_base::_Orphan_all+0x57: 005ae2f7 c70100000000 mov dword ptr [ecx],0 ds:0023:dddddddd=????????
استدعاء المكدس:
TestApplication!std::_Container_base::_Orphan_all+0x57 TestApplication!std::vector >::operator=+0x37 TestApplication!boost::asio::detail::win_iocp_io_service::do_one+0x189 TestApplication!boost::asio::detail::win_iocp_io_service::run+0xa2 TestApplication!boost::asio::io_service::run+0x3a
المحلول
المشكلة
أول فرصة استثناءات يعني أن المصحح يعطيك الشخص الذي يستخدم مصحح أول فرصة لتصحيح استثناء ، قبل أن يلقي به في البرنامج للتعامل مع هذه المسألة.
في هذه الحالة الاستثناء هو "انتهاك وصول".هذا يعني أن البرنامج يحاول القراءة / الكتابة من غير موقع الذاكرة.
الوصول إلى انتهاكات خطيرة لأنه يمكن إتلاف بعض الذاكرة وهو أمر حاسم لهذا البرنامج و هذا من شأنه أن يكون السبب المرجح أن توقف البرنامج.
من المسبب التعليمات يبدو كما لو كنت تحاول الحصول على محتويات 4 بايت قيمة من تعليمة غير قانونية.
تصحيح المشكلة
إذا كان هذا هو الكود الخاص بك ثم يمكنك بسهولة تصحيح هذه المشكلة عن طريق وضع التصحيح رمز موقع المجلد الإخراج الخاص بك مترجم (هذا من شأنه أن يتضمن ذات الصلة ملفات pdb)
عندما تحصل على هذا الاستثناء على مكدس الاستدعاءات (واحد من عرض ويندوز سيكون لديك)
هذا سوف تظهر لك مكان في التعليمات البرمجية الخاصة بك حيث المسببة المكدس قد نشأت.
الآن افتح ملف الذي يحتوي على هذا المصدر و تعيين نقطة توقف هناك برنامج ضرب هذه النقطة ووقف داخل windebugger.التصحيح من هذه النقطة و كنت أعرف بالضبط من الذي سطر من التعليمات البرمجية هذا الانتهاك يتم طرح
Tip :دفعة يأتي مع المصدر بحيث يمكنك بسهولة وضع نقطة فاصل داخل هذا القانون.تأكد من الضغط على F11 حين التصحيح عندما تحصل على اسيو::التفاصيل::win_iocp_io_service::do_one.
نصائح أخرى
إذا كنت تستخدم MSVC والتكوين التصحيح بناء، يعني 0xdddddddd
عادة ما الذي تحاول الوصول إلى ذاكرة محررة. إدارة الذاكرة CRT التصحيح يملأ الذاكرة الحرة مع 0xdd
.
والسجل ECX لديه عنوان غير صالح (DDDDDDDD). أود أن أقترح هذا هو حالة تلف الذاكرة. النظر في تحويل GFLAGS على للعملية.
مكدس الاستدعاءات تماما STL/دفعة رمز.إلا إن شيئا ما تفعله هو للخروج من العادية ، لن نفترض أن الخلل هو في أي قسم من مكدس الاستدعاءات قمت بلصقه.
زوجين من الأشياء للتحقق:
أي دفعة محددة #تعرف أنه يجب أن تكون محددة ولكن تخلخل?
تأمين SCL & مكرر التصحيح.في محاولة لتمكين/تعطيل ذلك.
هل خلط التصحيح & الإفراج عن رمز.(فكرة سيئة مع المحكمة الخاصة بلبنان/دفعة حاويات)