ஒரு நிரலை பிழைத்திருத்த, செயலிழப்பை பகுப்பாய்வு செய்ய அல்லது ஒரு குறிப்பிட்ட கட்டத்தில் நிரல் என்ன செய்கிறது என்பதைப் பார்க்க குனு பிழைத்திருத்தம் பயன்படுகிறது. இது 1980 களில் குனு திட்டத்தால் உருவாக்கப்பட்டது மற்றும் இது மிகவும் பரவலாகப் பயன்படுத்தப்படும் கட்டளை வரி பிழைத்திருத்திகளில் ஒன்றாகும், மேலும் இது மிகவும் பிரபலமான குனு மென்பொருளில் ஒன்றாகும்.
முதலில் ஒரு சிறிய C நிரலை எழுதுவோம், அதை பிழைத்திருத்தம் செய்வோம். தொடங்குவதற்கு, புதிய ஒன்றை உருவாக்கவும் .சி
கோப்பு பயன்படுத்தி விம்
அல்லது நீங்கள் விரும்பும் எடிட்டர்:
விம் டெஸ்ட்.சி
பின்வரும் சி நிரலை உருவாக்கவும்:
#include int main() {int i = 5; மிதவை f = 5.5 i = i + 3; f = f + 2.2; printf("i மற்றும் f இன் மதிப்பு: %d மற்றும் %f\n", i, f); திரும்ப 0; }
அச்சகம் எஸ்கேப்
விம் கட்டளை முறைக்கு செல்ல. பின்னர் தட்டச்சு செய்யவும் :wq
நிரலைச் சேமித்து வெளியேறவும்.
நிரல் இயங்குகிறதா என்று தொகுத்து பார்க்கவும்:
gcc test.c -o test ./test i மற்றும் f இன் மதிப்பு: 8 மற்றும் 7.700000
ஒரு நிரலில் பிழைத்திருத்த ஆதரவை இயக்க, நாம் அதை தொகுக்கிறோம் -ஜி
கொடி. கொடி பயன்படுத்தப்படாவிட்டால், வரையறுக்கப்பட்ட விருப்பங்கள் இருந்தாலும், பயனர் நிரலை பிழைத்திருத்த முடியும்.
gcc test.c -g -o சோதனை
பிழைத்திருத்தத்தைத் தொடங்க எங்கள் இயங்கக்கூடிய கோப்பு சோதனை
உள்ளே gdb
, நாங்கள் ஓடுகிறோம்:
gdb சோதனை
இது திறக்கும் gdb
பணியகம், அங்கு நீங்கள் தட்டச்சு செய்யலாம் gdb
கட்டளைகள். கட்டளைகளின் பட்டியலைப் பார்க்க, இதைப் பயன்படுத்தவும் உதவி
கட்டளை.
$(gdb) உதவி கட்டளைகளின் வகுப்புகளின் பட்டியல்: மாற்றுப்பெயர்கள் -- பிற கட்டளைகளின் பிரேக் பாயிண்ட்களின் மாற்றுப்பெயர்கள் -- குறிப்பிட்ட புள்ளிகளில் நிரலை நிறுத்துதல் தரவு -- தரவுக் கோப்புகளை ஆய்வு செய்தல் -- கோப்புகளை உள்நிலைகளைக் குறிப்பிடுதல் மற்றும் ஆய்வு செய்தல் -- பராமரிப்பு கட்டளைகள் தெளிவற்றது -- தெளிவற்ற அம்சங்கள் இயங்குகின்றன -- நிரல் அடுக்கை இயக்குதல் -- ஸ்டேக் நிலையை ஆய்வு செய்தல் -- நிலை விசாரணைகள் ஆதரவு -- ஆதரவு வசதிகள் ட்ரேஸ்பாயிண்ட்ஸ் -- நிரலை நிறுத்தாமல் நிரல் செயல்படுத்துதலைத் தடமறிதல் பயனர் வரையறுக்கப்பட்ட -- பயனர் வரையறுத்த கட்டளைகள் "உதவி" என தட்டச்சு செய்யவும். அந்த வகுப்பில் உள்ள கட்டளைகளின் பட்டியலுக்கு. அனைத்து கட்டளைகளின் பட்டியலுக்கு "அனைவருக்கும் உதவி" என தட்டச்சு செய்யவும். முழு ஆவணத்திற்கான கட்டளை பெயரைத் தொடர்ந்து "உதவி" என உள்ளிடவும். "வார்த்தை" தொடர்பான கட்டளைகளைத் தேட "apropos word" என தட்டச்சு செய்யவும். தெளிவற்றதாக இருந்தால் கட்டளை பெயர் சுருக்கங்கள் அனுமதிக்கப்படும்.
பின்னர் நீங்கள் தட்டச்சு செய்யலாம் உதவி வகுப்பு_பெயர்
அந்த வகுப்பைச் சேர்ந்த கட்டளைகளைப் பார்க்க. துணைச்சரத்தைப் பயன்படுத்தி கட்டளைகளைத் தேட, பயன்படுத்தவும் apropos substring
.
நிரல் ஒரு செயல்பாட்டிற்குள் நுழையும் போது ஒரு இடைவெளியை அமைக்க, ஓடு:
$(gdb) முக்கிய முறிவு
இங்கே நாம் நமது குறியீட்டில் உள்ள ஒரே செயல்பாட்டில் பிரேக் பாயிண்ட்டை அமைக்கிறோம், அதாவது. முக்கிய
. கட்டளையைப் பயன்படுத்தவும் ஓடு
அடுத்த இடைவெளி வரை அல்லது வெளியேறும் வரை நிரலை இயக்க.
$(gdb) ரன்
ஒரு செயல்பாட்டில் ஒரு குறிப்பிட்ட இடத்தில் இடைவெளியை அமைக்க, பயன்படுத்த:
முறிவு * முக்கிய + 4
இது பிரதான செயல்பாட்டின் 4 வது வரியில் முறிவுப் புள்ளியை அமைக்கும்.
இப்போது, நிரலின் ஓட்டத்தை அடுத்த குறியீட்டு வரிக்கு செல்ல, வெறுமனே இயக்கவும் படி
கட்டளை.
$(gdb) படி 5: மிதவை f = 5.5;
மாறியின் உள்ளடக்கங்களைக் காட்ட, ஓடு காட்சி
.
$(gdb) காட்சி i 6: i = 5
மாறியின் உள்ளடக்கங்களை மாற்ற, ஒரு மாறி, இயக்கத்தின் குறிப்பிட்ட மதிப்புகளின் கீழ் ஒரு நிரலின் இயக்கத்தை பகுப்பாய்வு செய்ய இது தேவைப்படலாம் செட் மாறி = வெளிப்பாடு
.
$(gdb) செட் மாறி i=10 $(gdb) காட்சி i 7: i = 10
இங்கே, 'எக்ஸ்பிரஷன்' என்பது செல்லுபடியாகும் (எண்கணிதம் / தர்க்கரீதியான) வெளிப்பாடாக இருக்கலாம். எளிமைக்காக, மாறிக்கு மற்றொரு மதிப்பை (10) ஒதுக்குகிறோம் நான்
.
நிரலுக்கான சட்டசபை குறியீட்டை அச்சிட, கட்டளையைப் பயன்படுத்தவும் பிரித்தெடுக்கும் செயல்பாடு பெயர்
:
வெறுமனே பயன்படுத்தவும் பிரிக்கவும்
முழு நிரலுக்கும் சட்டசபை குறியீட்டை அச்சிட. சட்டசபை குறியீட்டில் ஒரு குறிப்பிட்ட வரியில் உள்ள அம்புக்குறியைக் கவனியுங்கள். பிழைத்திருத்த அமர்வு தற்போது குறிப்பிட்ட நினைவக இடத்தில் இடைநிறுத்தப்பட்டிருப்பதைக் குறிக்கிறது (அதாவது, அந்தக் குறியீடு வரி).
ஒரு குறிப்பிட்ட குறியீட்டு வரியில் பிழைத்திருத்தியை குதிக்க, ஓடு:
$(gdb) ஜம்ப் *main + 2 0x400528 இல் தொடர்கிறது. பிரேக்பாயிண்ட் 2, 0x000000000040052a பிரதான () இல் test.c:3 3 int main() { 1: i = 2: f = 3: h = (void *) 0x0 4: main = {int ()} 0x400526 5: i =
இது செயல்பாட்டில் உள்ள குறியீட்டின் 2 வது வரியின் நினைவக இடத்தில் பிழைத்திருத்தியை குதிக்கச் செய்யும் முக்கிய
. இங்கே நான் பிரதான தொடக்கத்திலிருந்து நேரடியாக இரண்டாவது இடத்திற்குத் தாவினேன் என்பதை நினைவில் கொள்ளவும். எனவே, மாறி நான்
ஒருபோதும் அமைக்கப்படவில்லை, இதன் விளைவாக பிழைத்திருத்தி எறிதல் பிழையானது மாறியின் முகவரியில் நினைவக உள்ளடக்கங்களை அணுக முடியாது நான்
.
லினக்ஸில் இயங்கக்கூடிய கோப்பை பிழைத்திருத்தத்தைத் தொடங்குவதற்கு உதவும் சில அடிப்படை கட்டளைகள் இவை. இந்தப் பக்கத்தில் உள்ள தகவல்கள் உங்களுக்கு பயனுள்ளதாக இருக்கும் என நம்புகிறோம்.