സെഗ്മെന്റേഷൻ തകരാർ അല്ലെങ്കിൽ സെഗ്ഫോൾട്ട് എന്നത് ഒരു മെമ്മറി പിശകാണ്, അതിൽ ഒരു പ്രോഗ്രാം നിലവിലില്ലാത്ത അല്ലെങ്കിൽ പ്രോഗ്രാമിന് ആക്സസ് ചെയ്യാനുള്ള അവകാശം ഇല്ലാത്ത മെമ്മറി വിലാസം ആക്സസ് ചെയ്യാൻ ശ്രമിക്കുന്നു. … ഒരു പ്രോഗ്രാം സെഗ്മെന്റേഷൻ തകരാർ സംഭവിക്കുമ്പോൾ, അത് പലപ്പോഴും "സെഗ്മെന്റേഷൻ തകരാർ" എന്ന പിശക് വാക്യത്തിൽ ക്രാഷ് ചെയ്യുന്നു.
ലിനക്സിലെ സെഗ്മെന്റേഷൻ തകരാർ എങ്ങനെ പരിഹരിക്കാം?
സെഗ്മെന്റേഷൻ തെറ്റ് പിശകുകൾ ഡീബഗ് ചെയ്യുന്നതിനുള്ള നിർദ്ദേശങ്ങൾ
- പ്രശ്നത്തിന്റെ കൃത്യമായ ഉറവിടം ട്രാക്ക് ചെയ്യാൻ gdb ഉപയോഗിക്കുക.
- ശരിയായ ഹാർഡ്വെയർ ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ടെന്നും കോൺഫിഗർ ചെയ്തിട്ടുണ്ടെന്നും ഉറപ്പാക്കുക.
- എല്ലാ പാച്ചുകളും എപ്പോഴും പ്രയോഗിച്ച് അപ്ഡേറ്റ് ചെയ്ത സിസ്റ്റം ഉപയോഗിക്കുക.
- ജയിലിനുള്ളിൽ എല്ലാ ഡിപൻഡൻസികളും ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ടെന്ന് ഉറപ്പാക്കുക.
- അപ്പാച്ചെ പോലുള്ള പിന്തുണയുള്ള സേവനങ്ങൾക്കായി കോർ ഡംപിംഗ് ഓണാക്കുക.
എന്താണ് Linux സെഗ്മെന്റേഷൻ തെറ്റ്?
Linux പോലുള്ള ഒരു Unix ഓപ്പറേറ്റിംഗ് സിസ്റ്റത്തിൽ, ഒരു "സെഗ്മെന്റേഷൻ ലംഘനം" ("സിഗ്നൽ 11", "SIGSEGV", "സെഗ്മെന്റേഷൻ തെറ്റ്" അല്ലെങ്കിൽ, ചുരുക്കത്തിൽ, "sig11" അല്ലെങ്കിൽ "segfault" എന്നും അറിയപ്പെടുന്നു) പ്രോസസ്സ് ചെയ്യാത്ത ഒരു മെമ്മറി വിലാസം ആക്സസ് ചെയ്യാൻ ശ്രമിക്കുന്നുവെന്ന് സിസ്റ്റം കണ്ടെത്തിയപ്പോൾ ഒരു പ്രോസസ്സിലേക്ക് കേർണൽ അയച്ച ഒരു സിഗ്നൽ പങ്ക് € |
ഒരു സെഗ്മെന്റേഷൻ തകരാർ എങ്ങനെ പരിഹരിക്കും?
6 ഉത്തരങ്ങൾ
- -g ഉപയോഗിച്ച് നിങ്ങളുടെ ആപ്ലിക്കേഷൻ കംപൈൽ ചെയ്യുക, അപ്പോൾ നിങ്ങൾക്ക് ബൈനറി ഫയലിൽ ഡീബഗ് ചിഹ്നങ്ങൾ ഉണ്ടാകും.
- gdb കൺസോൾ തുറക്കാൻ gdb ഉപയോഗിക്കുക.
- ഫയൽ ഉപയോഗിക്കുക, അത് നിങ്ങളുടെ ആപ്ലിക്കേഷന്റെ ബൈനറി ഫയൽ കൺസോളിൽ കൈമാറുക.
- നിങ്ങളുടെ ആപ്ലിക്കേഷൻ ആരംഭിക്കേണ്ട ഏതെങ്കിലും ആർഗ്യുമെന്റുകളിൽ റൺ ആൻഡ് പാസ് ഉപയോഗിക്കുക.
- ഒരു സെഗ്മെന്റേഷൻ തകരാർ ഉണ്ടാക്കാൻ എന്തെങ്കിലും ചെയ്യുക.
എന്താണ് സെഗ്മെന്റേഷൻ തകരാറിന് കാരണമാകുന്നത്?
അവലോകനം. പ്രോഗ്രാമുകൾ തകരാറിലാകാൻ കാരണമാകുന്ന ഒരു സാധാരണ അവസ്ഥയാണ് സെഗ്മെന്റേഷൻ തകരാർ (അതായത് സെഗ്ഫോൾട്ട്). അവ പലപ്പോഴും കോർ എന്ന പേരിലുള്ള ഫയലുമായി ബന്ധപ്പെട്ടിരിക്കുന്നു. സെഗ്ഫാൾട്ടുകൾ ഉണ്ടാകുന്നത് ഒരു നിയമവിരുദ്ധമായ മെമ്മറി ലൊക്കേഷൻ വായിക്കാനോ എഴുതാനോ ശ്രമിക്കുന്ന ഒരു പ്രോഗ്രാം.
ഒരു സെഗ്മെന്റേഷൻ തകരാർ എങ്ങനെ കണ്ടെത്താം?
GEF, GDB എന്നിവ ഉപയോഗിച്ച് സെഗ്മെന്റേഷൻ തകരാറുകൾ ഡീബഗ്ഗിംഗ് ചെയ്യുന്നു
- ഘട്ടം 1: GDB-ക്കുള്ളിൽ സെഗ്ഫോൾട്ടുണ്ടാക്കുക. ഒരു ഉദാഹരണം segfault-കാരണമാകുന്ന ഫയൽ ഇവിടെ കാണാം. …
- ഘട്ടം 2: പ്രശ്നമുണ്ടാക്കിയ ഫംഗ്ഷൻ കോൾ കണ്ടെത്തുക. …
- ഘട്ടം 3: ഒരു മോശം പോയിന്റർ അല്ലെങ്കിൽ അക്ഷരത്തെറ്റ് കണ്ടെത്തുന്നത് വരെ വേരിയബിളുകളും മൂല്യങ്ങളും പരിശോധിക്കുക.
ഒരു സെഗ്മെന്റേഷൻ തകരാർ എങ്ങനെ ഡീബഗ് ചെയ്യാം?
ഈ പ്രശ്നങ്ങളെല്ലാം ഡീബഗ്ഗ് ചെയ്യുന്നതിനുള്ള തന്ത്രം ഒന്നുതന്നെയാണ്: GDB-യിലേക്ക് കോർ ഫയൽ ലോഡ് ചെയ്യുക, ഒരു ബാക്ക്ട്രെയിസ് ചെയ്യുക, നിങ്ങളുടെ കോഡിന്റെ പരിധിയിലേക്ക് നീങ്ങുക, സെഗ്മെന്റേഷൻ തകരാറിന് കാരണമായ കോഡിന്റെ വരികൾ ലിസ്റ്റ് ചെയ്യുക. ഇത് "കോർ" എന്ന് വിളിക്കുന്ന കോർ ഫയൽ ഉപയോഗിച്ച് ഉദാഹരണം എന്ന് വിളിക്കുന്ന പ്രോഗ്രാം ലോഡ് ചെയ്യുന്നു.
Linux-ൽ എന്താണ് GDB?
gdb ആണ് ഗ്നു ഡീബഗ്ഗർ എന്നതിന്റെ ചുരുക്കെഴുത്ത്. C, C++, Ada, Fortran മുതലായവയിൽ എഴുതിയിരിക്കുന്ന പ്രോഗ്രാമുകൾ ഡീബഗ് ചെയ്യാൻ ഈ ടൂൾ സഹായിക്കുന്നു. ടെർമിനലിലെ gdb കമാൻഡ് ഉപയോഗിച്ച് കൺസോൾ തുറക്കാവുന്നതാണ്.
സെഗ്മെന്റേഷൻ പിഴവ് ഒരു റൺടൈം പിശകാണോ?
സെഗ്മെന്റേഷൻ പിശക് ആണ് റൺടൈം പിശകുകളിൽ ഒന്ന്, അസാധുവായ അറേ സൂചിക ആക്സസ് ചെയ്യൽ, ചില നിയന്ത്രിത വിലാസം ചൂണ്ടിക്കാണിക്കൽ തുടങ്ങിയ മെമ്മറി ആക്സസ് ലംഘനം മൂലമാണ് ഇത് സംഭവിക്കുന്നത്.
സിയിലെ സെഗ്മെന്റേഷൻ പിശക് എന്താണ്?
തുടക്കക്കാർക്ക് സി പ്രോഗ്രാമുകൾക്കുള്ള ഒരു സാധാരണ റൺ-ടൈം പിശക് "സെഗ്മെന്റേഷൻ ലംഘനം" അല്ലെങ്കിൽ "സെഗ്മെന്റേഷൻ തകരാർ" ആണ്. നിങ്ങളുടെ പ്രോഗ്രാം പ്രവർത്തിപ്പിക്കുമ്പോൾ സിസ്റ്റം "സെഗ്മെന്റേഷൻ ലംഘനം" റിപ്പോർട്ട് ചെയ്യുമ്പോൾ അതിനർത്ഥം നിങ്ങളുടെ പ്രോഗ്രാം മെമ്മറിയുടെ ഒരു ഏരിയ ആക്സസ് ചെയ്യാൻ ശ്രമിച്ചു, അത് ആക്സസ് ചെയ്യാൻ അനുവദനീയമല്ല.
സെഗ്മെന്റേഷൻ തകരാർ എങ്ങനെ തടയാം?
എല്ലായിപ്പോഴും വേരിയബിളുകൾ ആരംഭിക്കുക. ഫംഗ്ഷൻ റിട്ടേൺ മൂല്യങ്ങൾ പരിശോധിക്കുന്നില്ല. ഒരു പിശക് സൂചിപ്പിക്കാൻ ഫംഗ്ഷനുകൾ ഒരു NULL പോയിന്റർ അല്ലെങ്കിൽ ഒരു നെഗറ്റീവ് പൂർണ്ണസംഖ്യ പോലുള്ള പ്രത്യേക മൂല്യങ്ങൾ നൽകിയേക്കാം. അല്ലെങ്കിൽ റിട്ടേൺ മൂല്യങ്ങൾ സൂചിപ്പിക്കുന്നത് ആർഗ്യുമെന്റുകൾ വഴി തിരിച്ചുവിട്ട മൂല്യങ്ങൾ സാധുതയുള്ളതല്ല എന്നാണ്.
ലിനക്സിൽ ഡംപ് ചെയ്ത സെഗ്മെന്റേഷൻ തകരാർ എങ്ങനെ പരിഹരിക്കാം?
ഉബുണ്ടുവിലെ സെഗ്മെന്റേഷൻ തകരാർ (“കോർ ഡംപ്ഡ്”) പരിഹരിക്കുന്നു
- കമാൻഡ് ലൈൻ:
- ഘട്ടം 1: വിവിധ സ്ഥലങ്ങളിൽ നിലവിലുള്ള ലോക്ക് ഫയലുകൾ നീക്കം ചെയ്യുക.
- ഘട്ടം 2: റിപ്പോസിറ്ററി കാഷെ നീക്കം ചെയ്യുക.
- ഘട്ടം 3: നിങ്ങളുടെ റിപ്പോസിറ്ററി കാഷെ അപ്ഡേറ്റ് ചെയ്ത് നവീകരിക്കുക.
- ഘട്ടം 4: ഇപ്പോൾ നിങ്ങളുടെ വിതരണം അപ്ഗ്രേഡ് ചെയ്യുക, അത് നിങ്ങളുടെ പാക്കേജുകൾ അപ്ഡേറ്റ് ചെയ്യും.