2009-04-21 3 views
1

오늘 아주 이상한 버그가 있습니다. 양식에 단추가 있는데 클릭하면 양식의 표에 데이터가 채워집니다. 버튼을 두 번 클릭하면 '객체 참조가 객체의 인스턴스로 설정되지 않았습니다.'와 충돌합니다.중단 점이 코드 실행 방법을 변경할 수 있습니까?

내가 그 그리드의 인구를 처리하는 Sub의 시작 부분에 중단 점을 배치하고 발견했다 ... 그것은 더 이상 충돌하지 않았다. Visual Studio에서 'F5'키를 누르면 버튼이 클릭되며 충돌이 발생하지 않습니다. 나는 이것을 적어도 10 번이나했는데, 그것은 고쳐졌다.

그런 다음 중단 점을 제거하고 F5 키를 클릭하여 단추를 클릭하면 충돌이 발생합니다. 중단 점을 다시 추가하면 작동이 가능합니다.

누군가 여기서 일어나는 일을 설명 할 수 있습니까? 내가 사용하는 그리드 제 3 자 컨트롤 (Infragistics) 및 응용 프로그램은 WinForms 응용 프로그램입니다. 나는 어떤 쓰레딩도하지 않고있다. 나의 유일한 생각은 일종의 '경쟁 조건'이라는 것이다. 그러나 그것은 심지어 나에게 실제로 의미가 없습니다.

편집 : 이것은 VB.Net 응용 프로그램/비주얼 스튜디오 2008

답변

5

데이터가 여기에가는 몇 가지 비동기로드가있을 수 있습니다. 중단 점을 추가하면 비동기 시간이 완료됩니다. 너무 빠르게 클릭하면 데이터로드가 완료 될 때까지 기다리고 있으므로 오류가 발생합니다. 이 기능을 구현하지 않았지만 타사 컨트롤이있을 수 있습니다.

4

타이밍 문제처럼 들릴 수도 있습니다. & 백그라운드에서 일부 스레드가 계속 실행되고 있어야합니다 (제 3 자 제어).

예외에서 호출 스택을 가져올 수 있습니까?

릴리스 모드에서 (또는 중단 점이 없을 때) 첫 번째 클릭이 완전히 처리되기 전에 두 번째로 버튼을 클릭 할 수 있습니다.

중단 점을 설정하면 디버거가 포커스를 얻고 앱이 다시 동기화 할 수있게됩니다.

클릭 한 즉시 버튼을 비활성화 한 다음 처리가 끝난 후 다시 활성화 할 수 있습니다. 기본 문제 (예 : 제 3 자 제어)를 수정할 수없는 경우 문제가 발생하지 않게됩니다.

1

수동으로 디버그를 수행하는 데 걸리는 시간과 관련이 있다고 생각합니다. 당신이 그것을 완료하는 데 시간이 있지만, 디버깅되지는 응용 프로그램을

1

또 다른 가능성 ... 종종

충돌 할 때, 중단 할 수있는 디버깅 할 때 아마 당신은 (아마도 데이터베이스에 대한 연결) 뭔가 무거운 작업이이 중단 점의 코드를보고있는 경우 프로세스의 런타임 동작을 변경합니다. 예를 들어 속성 ​​위로 마우스를 가져 가거나 지역 창을 열어 놓은 경우 추가 코드로 진행하기 전에 속성이 즉시 평가됩니다.

Property의 getter는 사실적으로 하나의 메서드이기 때문에 잘못 작성된 클래스는 실제로 코드가 충돌하지 않도록하는 속성에서 "추가"작업을 수행 할 수 있습니다.

이것은 특히 그렇지는 않지만 속성의 지연 초기화를 한 타사 라이브러리에서 보았지만 그 중 하나의 메소드가 올바르게 초기화되지 않았습니다. 코드에서 속성을 본 적이 없다면 예외가 발생하지만 속성에 액세스하면 정리 된 것입니다.

관련 문제