개발자가 되기 위해서는 애플리케이션 또는 프로그램을 산출해내기 위해 다양한 작업을 한다.
그 중에 하나는 오늘 설명할 '디버깅'이다. 디버깅 과정은 개발자들 사이에 매우 지루하고 반복적인 작업으로😢 피곤한 작업으로 소히.. 노가다 라고도 불릴 수 있다.
그러나 완성도 높은 프로그램과 문제 해결 능력을 높이려는 방법에는 꼭 !!필요한 과정이다.
🐞 디버깅 이란 ?
컴퓨터 프로그램 개발 단계 중에 발생하는 시스템의 논리적인 오류나 비정상적 연산(버그)를 찾아내고 그 원인을 밝히고 수정하는 작업 과정 🔄을 뜻한다.
쉽게 말해 디버깅이란 황설탕 이 널 부러진 곳에서 백설탕 찾는 거라고 생각하면 쉽다. 👁️👃🏻👁️
💻 소프트웨어 버그는 프로그램에서 명령을 실행하지 못할 때 발견되는 경우가 많으며, 우리가 평소에 하는 게임할때 발생하는 일시적인 결함과는 다르다. 🙅🏻♀️
모든 소프트웨어에서는 버그가 발생하고, 최종 코드에서 버그를 제거하는 경우는 매우 어렵다. 버그는 주로 눈에 띄지 않는 곳에 숨어있어서, 버그를 찾는데는 오랜 시간🕐과 노력이 필요하다. 버그를 찾는 과정이 까다로워, 이 과정에서부터 계산 오류가 발생하거나 입력값이 정확하지 않은 문제가 발생할 수 있다.
📕 그렇다면 디버깅은 왜 하는 것일까?
소프트웨어 개발 중 종종 발생하는 버그는 프로그램 실행 목표를 서서히 저하 시키거나 프로그램 자체를 중단 시킬 위험이 있다. 프로그램의 버그를 제거하는 과정인 디버깅이 필수인 이유이다. !!
👍 디버깅을 완료 ! 하면, 개발자의 의도에 따라 소프트웨어가 더 완벽하게 작동할 확률이 높다는 점 ❗에서 디버깅이 중요하다.
또한 개발자는 디버깅 과정을 거치면서 다음 개발 과정에서 더 훌룡한 프로그램을 제작할 방법을 알 수 있다. 개발자가 프로그램 개발 과정에서 논리적, 문법적 실수를 깨닫는 데 큰 도움이 된다. ✌
그러므로 어떻게 보면 디버깅 과정은 개발자의 코딩 실력 향상에 도움👍이 된다.
📕 디버깅은 어떻게 동작할까?
🎈 디버거 🎈
디버거는 디버깅 대상 프로세스의 메모리를 읽고 쓸 수 있으며, 중단점과 같은 디버깅 대상 프로세스가 발생하는 다양한 디버그 이벤트에 반응하는 프로그램이다.
✅ 디버거는 일반적으로 ✨디버깅 대상 프로세스를 새로 시작 ✨하거나 OR
✨**이미 수행 중**인 **프로세스에 디버거를 연결** ✨**하게 된다.**
일단 디버깅 대상 프로세스와 연결이 끝나면
디버거는 DLL로드, 중단점, 싱글 스텝, 예외 발생과 같은 디버그 이벤트를 기다리고 이들
디버깅 이벤트 중 하나가 발생하면 그 이벤트를 처리하는 과정을 ✨반복✨하게 된다.
이 반복적 루프를 ✨디버거 루프✨ 라고 한다.
디버깅 대상 프로세스와 연결해 다른 프로세스의 메모리를 읽거나 쓰는 작업 혹은 디버그 이벤트를 수신하는 작업은 🐞 디버거 ❌혼자서 스스로 처리할 수 는 없다.❌
👀중단점이나👀 , 👀싱글 스템👀과 같은 기능은 디버깅 대상 프로세스가 운영체제로 ✨디버그 트랩✨ 을 발생하고
디버그 트랩이 발생하면 운영체제가 -> -> -> 🐞 디버거에게 🐞 디버그 이벤트를 발생시켜 준다.
✅ 따라서 디버거는 ✨반드시✨ 운영체제 커널의 도움을 받아야 하며, windows커널은 이와 같은 디버깅 지원 기능을 보유하고 있다.⭕
자 여기까지느 개념과 원리에 대한 설명이였다. !
그렇다면 디버깅하는 과정과 방법에 대해 알아보자.
💡 자신에게 올바른 질문을 하여 문제를 명확히 하자.
코드를 수정하려고 하기 전에 발생한 문제를 명확하게 하는 것이 좋다.
코드에서 문제가 발생했다고 예상해야한다.
그렇지 않으면 디버깅하는 방법을 파악하기 위해 여기에 있지 않을 것 이기 때문이다. 따라서 디버깅을 시작하기 전에 해결하고자 하는 문제를 파악했는지 확인해야한다.
그 첫 번째는 ! ✨ 코드에게서 어떤 동작을 기대하였는가? ✨
두 번째는 ✨ 그 대신 어떤 일이 발생하였는가 ? ✨ 에 주목해야 한다.
앱을 실행하는 동안 오류(예외)가 발생한 경우 이는 좋은 결과가 될 수도 있다!. 예외는 코드를 실행할 때 발생한 얘기지 않은 이벤트이며 일반적으로 일종의 오류이다.
디버깅 도구는 예외 가 발생한 코드의 정확한 위치로 안내하고 가능한 수정 사항을 조사하는데 도움이 된다.
다른 문제가 발생한 경우 문제의 증상은 무엇인가?
코드에서 이 문제가 발생한 위치를 이미 파악하고 있나?
✅ 예를 들어
코드에서 일부 텍스트를 표시하지만 텍스트가 올바르지 않은 경우 데이터가 잘못되었거나 표시 텍스트를 설정한 코드에 버그가 있다는 것!이다.
디버거에서 코드를 단계별로 실행하여 변수에 대한 각각 및 모든 변경 내용을 검사하여 올바르지 않은 값이 할당된 위치와 방법을 정확하게 파악할 수 있다.
💡 가정 검사
버그 또는 오류를 조사하기 전에 특정 결과를 예상하게 만든 가정을 생각해 보아야 한다.
디버거에서 문제의 원인을 보고 있는 경우에도 문제를 식별하는 과정에 숨겨진 또는 알 수 없는 가정이 💢방해가💢 될 수 있다.
가능한 가정의 긴 목록이 있을 수 있다. 다음은 가정이 올바른지 점검하기 위한 몇 가지 질문이다.
가정이 올바른지 점검하기 위한 몇 가지 질문들
- 올바른 API를 사용하고 있나요?(즉, 올바른 개체, 함수, 메서드 또는 속성) 사용 중인 API는 사용자가 생각하는 대로 작동하지 않을 수 있습니다. (디버거에서 API 호출을 검사한 후에 수정하려면 올바른 API를 식별할 수 있도록 설명서를 살펴봐야 합니다.)
- API를 올바르게 사용하고 있나요? 아마도 올바른 API를 사용했지만 올바른 방법으로 사용하지 않았을 것입니다.
- 코드에 오타가 포함되어 있나요? 변수 이름의 간단한 맞춤법 오류와 같은 몇 가지 오타는 사용되기 전에 변수를 선언할 필요가 없는 언어를 사용하는 경우에 특히 찾기 어려울 수 있습니다.
- 코드를 변경하고 표시되는 문제와 관련 없는 것으로 가정했나요?
- 개체 또는 변수에 실제로 발생한 것과 다른 특정 값(또는 특정 형식의 값)을 포함할 것으로 예상했나요?
- 코드의 의도를 알고 있나요? 다른 사람의 코드를 디버그하기가 종종 더욱 어렵습니다. 사용자의 코드가 아닌 경우 효과적으로 디버그하기 위해 코드가 수행하는 것을 정확하게 학습하는 데 시간을 소비해야 할 수 있습니다.
여기서 팁!
💡 **여기서 팁 !!** 💡
코드를 작성할 때 작은 것에서 시작하고, 작동하는 코드를 사용하여 시작합니다!
(여기에서는 좋은 샘플 코드가 유용합니다.)
경우에 따라 달성하려는 핵심 작업을 보여주는 코드의 작은 부분부터 시작하여 대규모 또는
복잡한 코드 집합을 수정하는 것이 쉽습니다. 그런 다음, 오류의 각 지점에서 테스트하여 코드를
점진적으로 수정하거나 추가할 수 있습니다.
'개발 상식' 카테고리의 다른 글
🌐 네트워크 기초 + json (0) | 2022.10.31 |
---|---|
📚 프레임워크와 라이브러리의 차이 (0) | 2022.10.26 |
객체지향 프로그래밍이란? (0) | 2022.10.22 |
언어의 컴파일 과정 (0) | 2022.10.12 |
🤓 클린 코드란? 🤓 (4) | 2022.10.10 |
댓글