C++ இல் பிரிவு பிழைக்கான காரணத்தை எவ்வாறு கண்டறிவது

C Il Pirivu Pilaikkana Karanattai Evvaru Kantarivatu



ஒரு பிரிவு பிழை, பிரிவு பிழை என்றும் அழைக்கப்படுகிறது, இது ஒரு நிரல் அணுகுவதற்கு அங்கீகரிக்கப்படாத நினைவக பகுதியை அடைய முயற்சிக்கும்போது ஏற்படும் ஒரு வகையான பிழையாகும். ஒரு பிரிவு பிழை ஏற்பட்டால், இயக்க முறைமை மேலும் சிக்கல்களை ஏற்படுத்துவதைத் தடுக்க நிரலை நிறுத்துகிறது. இந்தப் பிழை பொதுவாக நிரலின் குறியீட்டில் உள்ள பிழை அல்லது நிரலாக்கப் பிழையைக் குறிக்கிறது, அதாவது துவக்கப்படாத சுட்டியை அணுகுவது, பூஜ்ய சுட்டியை விலக்குவது அல்லது வரிசையின் எல்லைக்கு அப்பால் செல்வது.

பிரிவு பிழைகள் பிழைத்திருத்தத்திற்கு சவாலாக இருக்கலாம், ஏனெனில் அவை விரிவான பிழை செய்திகளை வழங்காமல் அடிக்கடி செயலிழக்கச் செய்யும். இருப்பினும், GDB (GNU Debugger) போன்ற கருவிகள், நிரலின் நிலை மற்றும் பிழையின் போது ஸ்டேக் ட்ரேஸ் ஆகியவற்றை ஆய்வு செய்வதன் மூலம் பிரிவு பிழையின் மூலத்தைக் கண்டறிய உதவும்.

பிரிவுத் தவறுகள் பொதுவாக நிரலாக்கப் பிழைகளால் ஏற்படுகின்றன மற்றும் அவை பிழைகளாகக் கருதப்படுகின்றன என்பதைக் கவனத்தில் கொள்ள வேண்டும். சிக்கலான குறியீட்டை மதிப்பாய்வு செய்து சரிசெய்வதன் மூலம் அவை சரிசெய்யப்பட வேண்டும். பிரிவு பிழைகளின் பொதுவான காரணங்கள் பின்வருமாறு:







  • பூஜ்ய அல்லது துவக்கப்படாத சுட்டிகளை விலக்குதல்
  • ஒரு வரிசையின் எல்லைக்கு வெளியே எழுதுதல் அல்லது படித்தல்
  • முன்பு ஒதுக்கப்பட்ட அல்லது வெளியிடப்பட்ட நினைவகத்தைப் பயன்படுத்துதல்
  • ஸ்டேக் ஓவர்ஃப்ளோ அல்லது ஸ்டேக் ஊழல்
  • துவக்கப்படாத மாறிகளைப் பயன்படுத்துதல்

உங்கள் குறியீட்டை கவனமாக ஆராய்வதன் மூலமும், GDB போன்ற பிழைத்திருத்தக் கருவிகளைப் பயன்படுத்துவதன் மூலமும், உங்கள் நிரல் சரியாகச் செயல்படுவதையும் இந்தப் பிழைகளைச் சந்திக்காமல் இருப்பதையும் உறுதிசெய்து, பிரிவுத் தவறுகளைக் கண்டறிந்து சரிசெய்யலாம்.



GDB பிழைத்திருத்தி

GDB (GNU Debugger) என்பது ஒரு சக்திவாய்ந்த பிழைத்திருத்தக் கருவியாகும், இது தொகுக்கப்பட்ட நிரல்களில் உள்ள சிக்கல்களைக் கண்டறிந்து பகுப்பாய்வு செய்ய உதவுகிறது. இது நிரலின் நிலையை ஆராய்வதற்கும், பிரேக் பாயின்ட்களைத் தூண்டுவதற்கும், செயல்பாட்டின் ஓட்டத்தைக் கவனிக்கவும் உதவுகிறது.



பிரிவு பிழைகளை பிழைத்திருத்த GDB ஐ திறம்பட பயன்படுத்த, உங்கள் C++ நிரலை இயக்கப்பட்ட பிழைத்திருத்த குறியீடுகளுடன் தொகுக்க வேண்டும். இந்த குறியீடுகளில் நிரலின் கட்டமைப்பு, மாறிகள் மற்றும் பிழைத்திருத்த செயல்முறைக்கு உதவும் செயல்பாடுகள் பற்றிய கூடுதல் தகவல்கள் அடங்கும்.





GDB உடன் C++ இல் பிரிவு பிழையைக் கண்டறிதல்

பிரிவு பிழையை ஏற்படுத்தும் ஒரு எடுத்துக்காட்டு குறியீடு துணுக்கு இங்கே:

# அடங்கும்

முழு எண்ணாக முக்கிய ( ) {

முழு எண்ணாக * ptr = nullptr ;

* ptr = 5 ;

திரும்ப 0 ;

}

முதலில் குறியீட்டை விளக்குவோம். பின்னர், முந்தைய குறியீட்டில் ஒரு பிரிவு பிழையை கண்டறிவது பற்றி படிகளில் விவாதிப்போம்.



“#include ” முன்செயலி கட்டளையானது தேவையான தலைப்புக் கோப்பைச் சேர்க்கிறது, இது C++ இல் உள்ளீடு மற்றும் வெளியீட்டு ஸ்ட்ரீம் பண்புகளை வழங்குகிறது.

main() செயல்பாட்டின் உள்ளே, int* வகையின் சுட்டி மாறி “ptr” ஒரு அறிவிப்பு உள்ளது. “nullptr” மதிப்பு சுட்டியின் துவக்கமாகப் பயன்படுத்தப்படுகிறது, இது ஒரு சிறப்பு பூஜ்ய சுட்டிக்காட்டி மதிப்பாகும், இது எதையும் சுட்டிக்காட்டாது என்பதைக் குறிக்கிறது. சரியான நினைவக இடம்.

'*ptr = 5;' என்ற பின்வரும் வரியில் பூஜ்ய சுட்டிக்காட்டி “ptr” மூலம் Dereference முயற்சிகள் செய்யப்படுகின்றன. இந்த வழக்கில், 'ptr' 'nullptr' என அமைக்கப்பட்டதால், அணுகுவதற்கு சரியான நினைவக இருப்பிடம் இல்லை.

இப்போது, ​​பிரிவின் பிழையைக் கண்டறிய நிரலைத் தொகுக்க எடுக்க வேண்டிய சில படிகளைப் பற்றி விவாதிப்போம்.

படி 1: பிழைத்திருத்த குறியீடுகளை இயக்கவும்

தொடங்குவதற்கு, உங்கள் C++ நிரலை செயல்படுத்தப்பட்ட பிழைத்திருத்த குறியீடுகளுடன் தொகுக்க வேண்டும். தொகுக்கும் போது இயங்கக்கூடிய கோப்பில் பிழைத்திருத்தத் தகவலை வழங்க, “-g” கொடியைப் பயன்படுத்தவும். 'main.cpp' எனப்படும் C++ கோப்பு எங்களிடம் உள்ளதைக் கவனியுங்கள்.

$ g++ -ஜி main.cpp -ஓ முக்கிய

படி 2: GDB ஐ இயக்கவும்

நிரல் பிழைத்திருத்த குறியீடுகளுடன் தொகுக்கப்பட்டவுடன், இயங்கக்கூடிய கோப்பை ஒரு வாதமாக அனுப்புவதன் மூலம் GDB ஐ இயக்கவும்.

$ gdb முக்கிய

படி 3: திட்டத்தைத் தொடங்கவும்

GDB வரியில் 'ரன்' அல்லது 'r' என தட்டச்சு செய்வதன் மூலம் நிரலைத் தொடங்கவும்:

$ ( gdb ) ஓடு

உங்கள் நிரல் பின்னர் இயக்கத் தொடங்கும்.

படி 4: பிரிவு பிழையை அடையாளம் காணவும்

பிரிவு பிழையை எதிர்கொள்ளும் வரை நிரல் தொடர்ந்து இயங்கும். நிரல் இயங்குவதை நிறுத்துகிறது, மேலும் GDB ஒரு பிழை செய்தியை உருவாக்குகிறது.

எடுத்துக்காட்டாக: பூஜ்ய சுட்டியால் சுட்டிக்காட்டப்பட்ட நினைவக இருப்பிடத்திற்கு 5 இன் மதிப்பை ஒதுக்க முயற்சிக்கும் போது, ​​அது ஒரு பிரிவு பிழையை விளைவிக்கும் முன்னர் விளக்கப்பட்ட குறியீட்டைக் கருத்தில் கொள்வோம். பிரிவு பிழை ஏற்படும் இடத்தில் நிரல் உடனடியாக முடிவடைகிறது.

GDB உடன் இந்த நிரலை இயக்கும் போது, ​​பின்வருவனவற்றிற்கு ஒத்த வெளியீட்டைக் காண்பீர்கள்:

இந்த வெளியீடு 'main.cpp' கோப்பின் வரி 5 இல் முக்கிய செயல்பாட்டில் ஒரு பிரிவு பிழை ஏற்பட்டது என்பதைக் குறிக்கிறது.

படி 5: ஸ்டேக் ட்ரேஸை ஆய்வு செய்யவும்

பிரிவு பிழையைப் பற்றிய கூடுதல் நுண்ணறிவுகளைப் பெற, 'பேக்டிரேஸ்' கட்டளை அல்லது வெறுமனே 'பிடி' ஐப் பயன்படுத்தி ஸ்டேக் ட்ரேஸை நீங்கள் ஆராயலாம். இந்த கட்டளை செயலிழப்புக்கு வழிவகுக்கும் செயல்பாட்டு அழைப்புகளின் வரிசையைக் காட்டுகிறது.

$ ( gdb ) bt

ஸ்டேக் ட்ரேஸ் காட்டப்படும், இது பிரிவு பிழைக்கு முன் அழைக்கப்படும் செயல்பாடுகளைக் குறிக்கிறது:

இந்த வெளியீடு 'main.cpp' கோப்பின் 5வது வரியில் உள்ள முக்கிய செயல்பாட்டில் பிரிவு பிழை ஏற்பட்டது என்று கூறுகிறது.

படி 6: முறிவு புள்ளிகளை அமைக்கவும்

மேலும் விசாரிக்க, அந்த புள்ளிகளில் நிரலின் செயல்பாட்டை நிறுத்த, குறியீட்டின் குறிப்பிட்ட வரிகளில் பிரேக் பாயின்ட்களை அமைக்கலாம். நிரலின் நிலை மற்றும் மாறிகளை ஆய்வு செய்ய இது உங்களை அனுமதிக்கிறது. எடுத்துக்காட்டாக, “main.cpp” இன் வரி 5 இல் பிரேக் பாயின்ட்டை அமைக்க, “பிரேக்” கட்டளையைப் பின்வருமாறு பயன்படுத்தவும்:

$ ( gdb ) உடைக்க main.cpp: 5

இது “main.cpp” கோப்பின் 5வது வரியில் முறிவுப் புள்ளியை அமைக்கிறது:

படி 7: செயல்படுத்தலை மீண்டும் தொடங்கவும்

பிரேக் பாயின்ட்களை அமைத்த பிறகு, 'தொடரவும்' கட்டளை அல்லது 'c' ஐப் பயன்படுத்தி நிரலின் செயல்பாட்டை மீண்டும் தொடங்கவும்:

$ ( gdb ) தொடரவும்

நிரல் இடைவேளையை அடையும் வரை தொடர்ந்து இயங்கும்.

படி 8: மாறிகள் மற்றும் குறியீட்டை ஆய்வு செய்யவும்

நிரல் ஒரு இடைவெளியில் நிறுத்தப்பட்டதும், மாறிகளை ஆராயவும், குறியீட்டின் வழியாகவும், பிரிவு பிழைக்கான காரணத்தை ஆராயவும் பல்வேறு GDB கட்டளைகளைப் பயன்படுத்தலாம்.

படி 9: GDB ஐ விட்டு வெளியேறவும்

பிழைத்திருத்தத்தை முடித்தவுடன், 'வெளியேறு' கட்டளையைப் பயன்படுத்தி GDBயிலிருந்து வெளியேறலாம்:

$ ( gdb ) விட்டுவிட

இது C++ நிரல்களில் உள்ள பிரிவு பிழைகளைக் கண்டறிய GDB ஐப் பயன்படுத்துவதற்கான அடிப்படைக் கண்ணோட்டத்தை வழங்குகிறது. பிழைத்திருத்தத்திற்கு உதவக்கூடிய பல அம்சங்களையும் கட்டளைகளையும் GDB வழங்குகிறது, மேலும் ஆழமான தகவலுக்கு GDB ஆவணத்தைப் பார்க்கவும்.

முடிவுரை

C++ இல் உள்ள பிரிவு பிழையைக் கண்டறிய GDBயின் பயன்பாட்டை இந்தக் கட்டுரை விளக்குகிறது. பின்பற்ற வேண்டிய வழிமுறைகளை நாங்கள் உங்களுக்கு விளக்கினோம். இந்த படிகள் GDB ஐப் பயன்படுத்தி C++ இல் ஒரு பிரிவு பிழையை எவ்வாறு கண்டுபிடிப்பது என்பது பற்றிய விரிவான விளக்கத்தை வழங்குகிறது. இந்தப் படிகளைப் பின்பற்றி, GDB இன் அம்சங்களைப் பயன்படுத்துவதன் மூலம், உங்கள் C++ திட்டத்தில் உள்ள பிரிவு பிழையின் மூலத்தைக் கண்டறிந்து பிழைத்திருத்தம் செய்யலாம்.