어둠 속에서 촬영 - 어플 리케이션 버그


0

좋아, 어둠 속에서 내 응용 프로그램을 볼 수 없으면 약간의 촬영이 될 것입니다!

버그가 있습니다. 내가 SwimmingPool 클래스를 가지고, 내 애플 리케이션은 당신이 모든 swimmingPool 클래스 필드를 볼 수있는 상세보기로 tableview에서 수영장을 전달합니다. 그런 다음 개별 세부 사항을 클릭하고 편집 한 다음 저장할 수 있습니다. 「원의의」풀 기능이 카피되어 실제로 변경을 실시하는 뷰 컨트롤러에 건네집니다. 변화의

  1. 버그 결과 : 사용자 프레스 저장하면 필드는

    switch (self.sectionFromParentTable) { 
        case KNameIndex: 
         self.thePoolFacility.name = self.thePoolFacilityCopy.name; 
         self.thePoolFacility.type = self.thePoolFacilityCopy.type; 
         break; 
    
        case KAddressIndex: 
         self.thePoolFacility.address = self.thePoolFacilityCopy.address; 
         break; 
    
        case KPhoneNumberIndex: 
         self.thePoolFacility.phoneNumber = self.thePoolFacilityCopy.phoneNumber; 
         break; 
    
        case KWebAddressIndex: 
         self.thePoolFacility.webAddress = self.thePoolFacilityCopy.webAddress;   
         break; 
        case KPricesIndex: 
         self.thePoolFacility.prices = self.thePoolFacilityCopy.prices; 
         break; 
        case KPoolIndex: 
         self.thePoolFacility.pools = self.thePoolFacilityCopy.pools; 
        default: 
         break; 
    } 
    
    [self.navigationController popViewControllerAnimated:YES]; 
    

    내가 다음을 수행 버그에서 몇 가지 추측을 가질 수 '원본'에 복사에서 복사 을 클래스 '필드에 저장하지 않았습니다. 특히 TimeEntry라는 클래스는 Pool이라는 클래스에서 TermTimes라고하는 사전의 월요일이라는 가변 배열에서 호출 한 다음 Pools라는 가변 배열에서 호출합니다.

  2. 임의로 표시됩니다. 때로는 가 완벽하게 작동합니다. 때로는 하지 않습니다! 오류를 다시 만들 수 없습니다. 행운을 얻으려면 을 저장할 수 있습니다. 내 직감은 시간이 민감한 일 수 있습니다. 예를 들어, 내가 개방 시간표에 대한 시간표를 입력하는 경우 신속하게 개의 항목을 추가하고 보통 을 저장하면 잘 작동합니다. 전체 시간표를 기입하면 이상을 저장하지 않습니다.

  3. 응용 프로그램이 중단되지 않습니다.

무작위로 발생하는 것으로 보이는 오류를 시도하고 디버깅하는 데 무리가 있습니다. 그런 장엄한 버그 사냥에 관한 어떤 힌트라도?

0

"random"과 "hard to reproduce"는 멀티 스레딩과 관련된 문제라고 생각합니다. 경쟁 조건은 재생산 및 디버그하기가 매우 어렵습니다. 이 작업을 수행하는 데 필요한 리소스에 대한 독점 권한이 있는지 확인해야합니다.

  0

죄송합니다. 저는 멀티 스레딩에 대한 지식이 없습니다. 아이폰 앱을 만들고 있는데 멀티 스레딩을 특별히 설정하지 않았습니다. 21 feb. 092009-02-21 22:42:48


2

이러한 유형의 문제 (확실하게 재현 할 수없는 경우)를 해결하는 가장 좋은 방법 중 하나는 특정 상황이 발생할 것으로 예상되는 다양한 영역에 로깅 코드를 삽입하는 것입니다. 오류가 발생할 수있는 장소를 기록하고, 기대하고있는 값과 갖고있는 값을 기록하십시오. 그런 다음 버그를 재현 할 수있을 때까지 시도하십시오.

이전과 달리, 이제는 로그를보고 문제가 발생한 곳을 볼 수 있습니다. 모든 것이 여전히 올바른 것처럼 보이면 다른 곳에서 로깅 코드를 삽입하십시오. 무언가 잘못되었다는 것을 알지만 이해하지 못한다면, 그 영역에 더 많은 로깅 코드를 넣고 문제를 줄이십시오.

이 방법을 사용하면 버그가 어떻게 발생하는지에 대한 새로운 가설이 생기면 디버거에서 재현하고 수정할 수 있습니다.

duffymo가 언급했듯이 멀티 스레딩이 원인 일 수 있으며 의도적으로 여러 스레드를 사용하는 경우 먼저 조사하는 것이 좋습니다.


0

제 제안은 nils를 찾는 것입니다. nil 객체에 대한 모든 메소드 호출은 아무 일도 일어나지 않고 nil을 반환하므로 메서드를 호출해야 할 때마다이를 호출해야합니다. (.foo =는 setFoo :와 동일하므로 nil이됩니다.foo = 1; 아무 것도하지 않겠습니다.)


0

답장을 보내 주셔서 감사합니다. 이제 수정되었습니다.

내 셀 하위 클래스의 XIB에 cellidentifer를 추가하는 것을 잊어 버린 사람들에게 감사드립니다.

cellForRow : 메서드는 매번 새로운 셀을 생성합니다. 기억이 아주 빨리 채워졌습니다. 그런 다음 내 응용 프로그램이 자동으로 편집 모드에서 다른 tableView를 강제로 내 인스턴스를 올바르게 관리하지 않아서 뚱뚱한 부분을 자르고있는 것처럼 보였습니다.

다시 메모리 문제입니다. 항상 그렇지는 않습니다!

실마리는 콘솔에서 101 오류가 발생하여 내 앱이 너무 많은 메모리를 사용하고 있음을 나타냅니다. 아, 그리고 느린 스크롤 tableView.