observe_db

[C언어] 1.(외전) 안이 외않되 본문

프로그래밍 언어 기초/C언어

[C언어] 1.(외전) 안이 외않되

쩡윤 2023. 2. 9. 13:39

버그(bug): 소프트웨어가 잘못된 결과를 내거나, 오류, 착오, 오작동이 발생하는 문제를 말한다.

개발자 입장에서는 프로그램이 의도대로 작동하지 않는 것이다. 설계과정이나 소스 코드의 문제로 발생한다.

메모리 할당/반환, 오버플로우, NULL 값 관련, 예외 케이스 같은 문제들(어떤 버그는 하드웨어적 문제로 발생하기도 한다.[1])

 

 

에러(error): 오류(誤謬)라고도 한다. 대개 프로그램이 컴파일되지 않는다.

-컴파일 에러(compile error): 맞춤법, 문장부호(세미콜론 등), 변수 선언 관련

TMI: 인터프리터 언어의 parse error가 이 에러와 유사

-런타임 에러(runtime error): 0으로 나누기, 무한루프, 널 포인트 에러, segmentation fault/bus error

-논리 에러(logic error): 실행은 되지만 결과가 다르다. 알고리즘의 문제

-링킹 에러(linking error): 링커의 담당부분, 즉 다른 소스파일들을 연결할 때에 발생한다.

 

디버깅(debug): 프로그램에 존재하는 버그를 찾아내어 수정하는 작업.

찾는다와 수정한다로 간단하게 함축했지만. 코드는 굉장히 복잡하기에 많은 경우를 생각해야 한다. 그렇기에 프로그래밍에 있어서 상당한 시간을 쓰는 작업이다. 사람에 따라 5할에서 8할이라고까지 말한다.

중단점을 이용하거나, 메모리 저장값을 확인하고, 단계적으로 실행하는 등의 여러 동작이 있다.

최근에는 디버거에 메모리 관련 오류를 찾아내는 등의 기능도 지원하고 있다카더라.

[2]

 

 

여담

버그랑 에러랑 차이를 모르겠다면

개발자들이 '왜 안되지?" 하는건 죄다 버그라고 봐도 된다.('왜 되지?'도 아마 버그..)

에러는 컴파일러가 오류났다는 것을 알려주는 경우가 많다.


[1] 버그의 어원은 진짜로 벌레이다.(정확히는 나방) 컴퓨터(MK II) 사이에 껴서 작동이 안되었다고.

[2] 버그가 없다면 매우 단순하거나, 그걸 모를정도로 복잡하거나, 그냥 어떻게든 돌아가고 있거나 같은 케이스다.

사실상 버그가 없기는 어렵다.

 

Comments