Xcode 4 및 핵심 데이터 : SQL 디버깅을 활성화하는 방법


102

범용 iOS 앱에서 작업 중이며 디버깅 할 때 로그에서 원시 SQL을보고 싶습니다. 이 블로그 게시물 에는 iOS 코어 데이터 개발을 위해 원시 SQL 로깅을 활성화하는 방법에 대한 정보가 있습니다 . 주어진 예제는 Xcode 3에 대한 것이며 Xcode 4에서 이것을 활성화하는 방법이 명확하지 않습니다.

"Product"-> "Edit Scheme"을 시도 하고 "Arguments Passed on Launch"에 " -com.apple.CoreData.SQLDebug 1 "을 추가 했지만 여전히 로그에 출력이 표시되지 않습니다. 내가 잘못된 곳을 찾고 있는지 아니면 단순히 인수를 잘못 전달하고 있는지 확실하지 않습니다.


1
감사합니다. 내 주요 문제는 내가 검색하는 테이블에 74,000 개 이상의 행이 있고 지금은 매우 느리기 때문에 쿼리가 실행되는 시간에 대한 아이디어를 얻고 싶었습니다. 저는 추상화가 많이 진행되고 있다는 사실을 존중하지만, 내부에서 무슨 일이 벌어지고 있는지에 대해서는 정말 어둠 속에있었습니다. 이것은 적어도 조금만 도움이됩니다.
oalders

한계를 이해하는 한, 특히 성능 조정을 위해 원시 SQL을 살펴 보는 것이 좋습니다. 사람들이 문제가되는 곳은 원시 SQL을보고 객체 그래프가 어떻게 작동하는지 파악하는 것입니다. 둘 사이에 직접적인 관계가 없기 때문에 그들을 타락하게 만든다.
TechZen 2011

답변:


150

NSLOGS를받는 것과 같은 위치를보고 있어야합니다.

그리고 Product-> Edit Scheme-> 왼쪽 패널에서 Run YOURAPP.app를 선택하고 메인 패널의 Arguments 탭으로 이동해야합니다.

여기에서 Argument Passed On Launch를 추가 할 수 있습니다.

추가해야합니다 -com.apple.CoreData.SQLDebug 4(1에서 4 사이의 숫자, 숫자가 높을수록 더 상세 함)

확인을 누르면 모든 설정이 완료됩니다.

여기서 핵심은 테스트에 사용할 구성표를 편집하는 것입니다.


8
감사합니다. 시뮬레이터가 진행되는 한 여기의 답변 중 하나에서 볼 수 있듯이 내 인수의 형식이 잘못되었습니다. stackoverflow.com/questions/822906/… -com.apple.CoreData.SQLDebug 의 인수를 전달해야합니다. SQL 출력을 보려면 두 번째 인수 1 을 지정합니다.
oalders

2
데이터베이스에 전달되는 인수를 인쇄하는 방법에 대한 생각이 있습니까? 이 접근 방식은 쿼리가 어떻게 구조화되는지 확인하는 데 잘 작동하지만 SQL 문만 인쇄합니다. 예 UPDATE ZTABLE SET ZCOLUMN = ? WHERE ZID = ?를 들어 전송되는 데이터가 무엇인지 실제로 확인하는 것은별로 유용하지 않습니다
Felipe Sabino

사실, 나는 진짜 SO 질문으로 추가하는 것이 좋습니다 것이라고 생각) stackoverflow.com/questions/12306343/...
펠리페 비노

다른 경우가 아닌 데이터베이스에 삽입하는 경우에만 기록 할 수있는 방법이 있습니까?
Bishal Ghimire

@BishalGhimire 잘 모르겠습니다. 어딘가에서 이벤트별로 필터링 할 수 있습니다. 텍스트 필터링을 사용하여 출력을 직접 필터링합니다.
Nicolas S

20

XCode 4

NSZombieEnabled를 관리하는 동일한 장소에 있습니다.

제품-> 스키마 편집-> YouApp.app 디버그 실행

"실행시 전달 된 인수"아래에 정확히 다음을 붙여 넣습니다.

-com.apple.CoreData.SQLDebug 1

경고-이 항목은 매우 장황합니다. 핵심 데이터 문제가있는 경우 살펴볼 가치가 있지만 잘못된 항목에 대해 필요한 것보다 더 많은 정보를 제공 할 수도 있습니다.


이 -com.apple.CoreData.MigrationDebug 1을 문자열 파일에 인쇄하여 사용자가 로그 파일을 업로드 할 수 있도록하는 방법
rhlnair 2014-08-22

5

나는 이것에 문제가 있었는데 그것이 어리석은 누락이라는 것을 깨달았습니다. 에 인수를 입력 할 때 Xcode (4.3.1)선행 하이픈을 생략했습니다. 명령 줄에 입력했다면 그렇게하지 않았을 것입니다.하지만 GUI에서는 생략했습니다. 2 개의 개별 인수 또는 1 개 (일부 게시물에서 제안했듯이)를 입력하는 것 사이에 차이가 없습니다. 따라서 다음을 사용하십시오.

-com.apple.CoreData.SQLDebug 1

그리고 단순히 :

com.apple.CoreData.SQLDebug 1

시뮬레이터와 실제 장치 모두에서 저에게 효과적이었습니다.


3

전달 된 값의 다른 수준을 입력 할 수 있습니다. 점점 더 자세한 정보를 제공합니다.

-com.apple.CoreData.SQLDebug 1
-com.apple.CoreData.SQLDebug 2
-com.apple.CoreData.SQLDebug 3
-com.apple.CoreData.SQLDebug 4 // This will actually show parameter binds ("?")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.