Tour debug console
Live debugging
LLDB improvements
실행이 너무 오래 걸린다거나
달랑 주소만 뜨는 경우
다른 명령어들이 있어서 다른 걸로 하면 잘 나올 수도 있다.
근데 너무 많아서 외우기 힘들다.
그래서 쉽게 쓸 수 있는 새로운 커맨드가 추가됐다.
dwim-print // do-what-I-mean
기존 p 명령어가 dwim-print의 typealias로 바뀌었다.
po도 dwim-print에 Object description 옵션을 주는 것의 typealias로 바뀌었다.
Tips for logging
로그는 특정 작업의 전후로 넣어야 한다.
stdio는 커맨드라인 UI용이고, OSLog는 디버깅 용이다.
ver1.
func login(password: String) -> Error? {
var error: Error? = nil
print("Logging in user '\\(username)'...")
…
if let error {
print("User '\\(username)' failed to log in. Error: \\(error)")
} else {
loggedIn = true
print("User '\\(username)' logged in successfully.")
}
return error
}
위치 파악이 잘 안된다. ver2.
func login(password: String) -> Error? {
var error: Error? = nil
print("🤖 Logging in user '\\(username)'... (\\(#file):\\(#line))")
//...
if let error {
print("🤖 User '\\(username)' failed to log in. Error: \\(error) (\\(#file):\\(#line))")
} else {
loggedIn = true
print("🤖 User '\\(username)' logged in successfully. (\\(#file):\\(#line))")
}
return error
}
OSLog ver.
import OSLog
let logger = Logger(subsystem: "BackyardBirdsData", category: "Account")
func login(password: String) -> Error? {
var error: Error? = nil
logger.info("Logging in user '\\(username)'...")
//...
if let error {
logger.error("User '\\(username)' failed to log in. Error: \\(error)")
} else {
loggedIn = true
logger.notice("User '\\(username)' logged in successfully.")
}
return error
}
OSLog로 수집되는 정보
컴포넌트마다 로그 핸들을 만들어서 사용하라.
OSLogStore를 사용해서 실제 사용중인 앱의 이슈 정보를 수집하기
OSLog는 추적 도구기 때문에 instrument 등을 사용해서 성능 측정용으로도 쓸 수 있다.