Грешка в сегментирането на Ubuntu, Losst
Програмите в Linux не винаги се изпълняват според очакванията. Понякога по различни причини програмата дава грешка вместо нормална работа. Но ние не се нуждаем от грешка, ние се нуждаем от програма или по-скоро от функцията, която тя трябва да изпълнява. Днес ще говорим за една от най-сериозните и неразбираеми грешки. Това е грешка в сегментирането на Ubuntu. Ако такава грешка се появи само веднъж, тогава можете да я игнорирате, но ако това е редовно, трябва да направите нещо.
Разбира се, този проблем се случва не само в Ubuntu, но и във всички Linux дистрибуции, така че нашите инструкции ще бъдат от значение и за тях. Но ще се съсредоточим основно върху Ubuntu. Помислете какво е грешка в сегментирането на Linux, защо се появява, както и как да се справите с нея и какво да направите.
Какво представлява грешката в сегментирането?
Грешка в сегментирането, грешка в сегментирането или Segfault или SIGSEGV в Ubuntu и други Unix-подобни дистрибуции означава грешка в паметта. Когато получите тази грешка, това означава, че механизмът за защита на системната памет се задейства, тъй като програмата се е опитала да осъществи достъп или да напише данни в част от паметта, която няма разрешение за достъп.
За да разберем защо се случва това, нека разгледаме как работи работата с паметта в Linux, ще се опитам да опростя всичко, но това е приблизително как работи.
Защо възниква грешка в сегментирането?
И защо една прилична програма да се изкачва там, където не би трябвало? Да, по принцип няма нужда. Това се случва поради грешка в писането на програми или несъвместими версии на библиотеки и софтуер. Тази грешка често се появява в C или C ++ програми. На този език програмистите могат да работят ръчно с памет и езикът от своя страна не контролира, че го правят правилно, така че един неправилен достъп до паметта може да срине програмата.
Защо мога да получа тази грешка, когато библиотеките са несъвместими? По същата причина - неправилен достъп до паметта. Представете си, че имаме Linux библиотека (набор от функции), която има функция, която изпълнява конкретна задача. Нашата функция се нуждае от данни, за да работи, така че трябва да предаде низ, когато се извика. Нашата стара версия на библиотеката очаква низът да бъде с дължина до 256 знака. Но програмата е актуализирана, форматът на запис се е променил и сега тя прехвърля низ от 512 знака в библиотеката. Ако актуализирате програмата, но оставите старата версия на библиотеката, тогава при прехвърляне на такъв низ 256 символа ще бъдат записани нормално на подготвеното място, но вторият 256 ще замени данните на програмата и вероятно ще се опита да надхвърли сегмент, тогава ще има грешка в сегментирането на Linux.
Какво да направите, ако възникне грешка в сегментирането?
Ако смятате, че това е грешка в програмата, просто трябва да изпратите доклад за грешка на разработчиците. Но все пак можете да опитате да направите нещо.
Например, ако неизвестна програма се срине с грешка в сегментирането, тогава можем да решим, че вината е на разработчиците, но ако chrome или firefox се срине с такава грешка при стартиране, възниква въпросът, правим ли нещо нередно? В крайна сметка това са вече добре тествани програми.