디버깅이란,
프로그래밍 과정 중 발생하는 오류나 버그를 찾는 작업을 디버그라고 하고,
디버그하는 과정을 디버깅이라고 한다.
본 포스팅에서는 디버깅에서 사용되는 세가지 방법을 정리해보고자 한다.
Print문
디버깅 중, 정확한 값이 출력되는지 알아보기 위해 Print문을 사용해서, 그 부분에서 출력되는 값을 알아보는 방법이다.
func numberMaker() -> Int {
return Int.random(in: 1...100)
}
let randomNumber = numberMaker()
//print문으로 현재 어떤 값이 출력되고 있는지 확인.
print("random number is \(randomNumber)")
문자열 보간에 대한 글을 읽고 오면 이해가 쉽다.
OSLog
로그란 무엇이냐, 기록을 남기는 것.
그럼 OSLog란 무엇이냐, Swift에서 지원하는 로그를 찍는 도구이다.
로그의 5가지 단계
로그의 심각성을 나타내는 단계라고 생각하면 된다.
가장 기본적인 Default 레벨
그다음 Debug 레벨
그다음 정보성 로그인 info 레벨
그다음 에러 상황에서 남기는 error 레벨
그다음 가장 심각한 상황에 남기는 fault 레벨.
import UIKit
import OSLog
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
os_log(.default, "[default] randomNumber = \(self.numberMaker())")
os_log(.debug, "[debug] randomNumber = \(self.numberMaker())")
os_log(.info, "[info] randomNumber = \(self.numberMaker())")
os_log(.error, "[error] randomNumber = \(self.numberMaker())")
os_log(.fault, "[fault] randomNumber = \(self.numberMaker())")
}
func numberMaker() -> Int {
return Int.random(in: 1...100)
}
}
OSLog를 import하고,
os_Log(.레벨선택, 남길 메시지 입력)
요렇게 해서 로그를 남기면 되곘다.
그럼 콘솔창에
이런식으로 로그가 남게 된다.
error와 fault 레벨은 자동으로 색으로 따로 구분이 된다.
lldb and break point
lldb란, low level debugger의 약자.
break point와 함께 사용한다.
break point란,
말 그대로 브레이크 포인트인데,
쉽게 말해서 브레이크 포인트를 지정하면, 거기까지만 코드가 실행된다.
브레이크를 걸어주는 것이다.
이런식으로 코드 옆의 줄번호를 눌러주면 브레이크 포인트가 생성된다.
브레이크 포인트를 끌어서 다른 곳으로 드래그하거나, 마우스 우클릭 후 Delete Break Point를 하면 사라지게 된다.
그리고 콘솔창에 있는 버튼으로 실행하거나 멈출 수 있다.
즉 브레이크 포인트를 걸고, 빌드한 다음에, 저 버튼을 누르면 브레이크 포인트 다음의 코드들을 실행하는 것이다.
브레이크 포인트 모양 옆에 있는 버튼이다. 왼쪽에서 두번째 버튼.
브레이크 포인트가 여러개 걸리면 어떻게 될까?
여기서는 먼저 17번 줄에서 randomNumber를 만났다.
randomNumber는 numberMaker 함수를 저장한 것이다.
그래서 18번 줄이나 19번 브레이크 포인트에 도달하기 전에 먼저 24번줄에 도착
24, 25번째 줄을 만난 뒤, 26번줄 브레이크포인트에 걸린다.
즉 19번을 만나기 전에, 17번 줄에 있는 코드 떄문에 26번에 먼저 걸리게 되는 것이다.
하지만 공백(26번째 줄)은 우리가 그냥 찍은것이고 실질적으로는 아무의미도 없기 때문에, 실질적으로는 27번에서 브레이크가 걸린것이다.
이와 같이 result에 31이 저장되고 브레이크가 걸려서 멈추게 된다.
26번 줄의 브레이크(실질적으로는 27번에서 멈춤. 26번이 공백이기 떄문에)에 걸린 상태로 멈추게 된다. 초록색 줄이 생겼다.
그럼 다시 실행시키면?
18번째 줄로 이동하고 다시 randomNumber2도 numberMaker함수를 저장하고 있기 때문에
19번 줄의 브레이크 포인트를 건너뛰고 24번으로 이동, 25까지 실행 후, 26번 브레이크에서 또 걸린다.
그리고 75가 찍혀있다.
한번 더 실행하면,
19번 브레이크 포인트에서 걸리게 되지만, 공백이기 때문에 20번에서 브레이크가 걸리게 된다.
실행은 안되고 단순히 멈추기만 한 것이다.
즉 20번에 도착, 20번 코드 실행. 이것이 원래 순서라면
브레이크 포인트가 걸려있기 때문에, 20번에 도착, 브레이크. 이렇게 되는 것이다.
그리고 17, 18번은 이미 실행이 되었기 때문에,
요렇게 두개가 찍혀있게 된다.
그리고 한번 더 실행하면,
20번, 21번줄의 print문 실행.
그리고 20번 21번 코드 밑에있는 것들은 함수만 남아있고 다른 여타 실행시키는 코드가 없기 때문에
브레이크도 끝나게 된다.
lldb(low level debugger)
lldb를 사용하기 위해서, 브레이크 포인트를 걸고 빌드한다.
그리고 네비게이션 영역에서 디버그 탭으로 이동하면 사진과 같은 상태가 될 것이다.
그리고 콘솔화면은 이렇게 뜨는데, 이곳에 무언가를 작성할 수 있게 된다.
그리고 콘솔창에서 몇가지 명령어를 사용할 수 있는데,
po(print object).
print문처럼 출력을 할 수 있다.
연산도 가능하다.
expression.
변수를 선언하는 명령어. 단 lldb 콘솔 창에서만 통하는 명령어 변수이다.
이때 이미 있는 변수명을 선언하면 어떻게 될까?
알아서 변수명을 만들게 된다
randomNumber는 이미 있기 때문에, 자동으로 $R0라는 이름으로 새로 변수를 만들었다.
아까 말했듯이 연산또한 가능하다.
그럼 콘솔창을 비우는 방법은 무엇일까?
Command + K를 누르게 되면 콘솔창은 깨끗하게 비워진다.
'OS > iOS' 카테고리의 다른 글
코드베이스 UI 작성을 위한 셋팅 (0) | 2024.11.20 |
---|---|
[iOS] Stack View (0) | 2024.11.19 |
[iOS] 앱 생명주기 (0) | 2024.11.13 |
[Stroyboard] 새로운 View Controller를 만들고 연결하기. (0) | 2024.09.18 |
IBAction과 IBOutlet (0) | 2024.09.13 |
살아남는 iOS 개발자가 되기 위해 끊임없이 노력하고 있습니다.