JMP 액세스 위반 - 가능한 원인은 무엇입니까?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />이 질문에 답하는 것이 가능하다면(물론 그렇지 않을 수도 있습니다) "JMP가 액세스 위반을 수행하여 종료됩니다"라는 치명적인 오류 메시지의 원인은 무엇일까요?예를 들어, 잠긴 테이블에 데이터를 쓰려는 시도나 그와 비슷한 것을 찾아야 합니까?
나는 수년에 걸쳐 다양한 스크립팅 연습을 하는 동안 이 문제에 가끔 부딪혔지만 그 이유를 정확히 파악하지 못했습니다.일반적으로 나는 치명적인 오류가 발생한 것으로 보이는 스크립트 블록을 분리하고 다른 방식으로 다시 작성하면 문제가 사라집니다.시간이 지남에 따라 스크립팅이 향상됨에 따라 이러한 문제가 점점 더 줄어들었지만 여전히 가끔 문제가 발생합니다. 지금 꽤 복잡한 스크립트 중간에 하나를 보고 어디서부터 시작해야 할지 궁금합니다. 주의해야 할 원인이 있거나 그러한 오류를 생성할 수 있는 모호한 스크립팅 구성이 있습니까?
많은 감사
Re: JMP 액세스 위반 - 가능한 원인은 무엇입니까?예, 서로 다른 열에 모두 섞여 있어야 하는 데이터 유형(예: 문자, 숫자 등)이 있는 경우 특히 대량의 데이터를 처리할 때 이러한 위반이 발생할 수 있다는 것을 알았습니다. 제 경우에는 테이블의 일부 행이 약간 겹치기 때문에 해당 변수 이름을 가진 특정 열에 있어야 할 숫자 변수를 문자 데이터 유형의 열에 넣었습니다. JMP 기술 지원팀에서 데이터 테이블의 어떤 행이 문제를 일으켰는지 면밀히 파악한 후 데이터 테이블을 주의 깊게 살펴보면서 알아냈습니다. 처음에는 시스템 버그라고 가정했지만 충돌/액세스 위반이 발생했을 때 작업 중이던 데이터 테이블의 331,670개 행에서 시작하여 일부 변수(이전에 설명한 대로)가 약간 겹쳐서 그런 일이 발생했다는 사실을 알아냈습니다. 각 변수가 데이터 유형과 모델링 유형이 각 열에 대해 동일한 동일한 열에 적절하게 있는지 주의 깊게 확인하는 것이 좋습니다. 즉, 숫자변수 열에 문자변수가 있어서는 안 됩니다. 때로는 우편번호의 경우 숫자변수를 문자로 사용하기도 합니다. 하지만 내 생각엔 당신이 아이디어를 얻은 것 같아요. 적어도 내 경우에는 그게 문제인 것 같다. 원본 텍스트 파일을 다시 로드하고 데이터 형식을 다시 지정하여 문제를 해결했습니다.
Re: JMP 액세스 위반 - 가능한 원인은 무엇입니까?제안해 주신 Dan에게 감사드립니다. 방금 제출했습니다.
Re: JMP 액세스 위반 - 가능한 원인은 무엇입니까?충돌을 보여주는 스크립트가 있는 경우 다음 주소로 보내주십시오. JMP 기술 지원 .
Re: JMP 액세스 위반 - 가능한 원인은 무엇입니까?보고하신 문제는 향후 릴리스에서 수정되었습니다.이러한 문제를 발견하면 기술 지원에 보고하십시오. 우리는 가능한 한 빨리 충돌을 해결하려고 노력하며 종종 근본적인 문제를 해결하는 데 도움을 줄 수 있습니다.
Re: JMP 액세스 위반 - 가능한 원인은 무엇입니까?문제는 마지막 몇 행에 숫자 데이터가 있는 열에 문자 데이터가 있는 텍스트 파일의 입력과 관련이 있었습니다. 테이블에는 291,000,000개 이상의 행이 있었고 약간 잘못 배치된 데이터는 데이터 테이블의 마지막 몇(4) 행에 있었습니다. 나는 그것들을 수정했고 잘 작동했고 문제가 다시 발생했습니다. JMP 기술 지원팀에서는 문제가 발생한 것으로 생각되는 정확한 행을 제공했지만, 데이터를 다시 조사한 결과 입력 텍스트 데이터의 잘못된 필드에 약간 잘못 배치된 데이터가 거의 없다는 사실을 발견했습니다.
Re: JMP 액세스 위반 - 가능한 원인은 무엇입니까?의견을 보내주셔서 감사합니다. 이 경우 문제는 코드가 좋은지 나쁜지와 전혀 관련이 없다고 생각합니다.
Re: JMP 액세스 위반 - 가능한 원인은 무엇입니까?JMP를 사용하면 한 줄의 코드로 여러 메시지를 보낼 수 있지만 그렇게 하는 것은 의미가 없습니다. 보기 흉하고 의미가 모호하며 디버깅이 불가능합니다.따라서 JMP 충돌은 우리에게 괜찮은 코드를 작성하도록 상기시켜주는 것일 수도 있습니다!
Re: JMP 액세스 위반 - 가능한 원인은 무엇입니까?나는 또한이 문제를 발견했습니다. 내 경우에는 전체 스크립트가 큰 루프였고 20~30번의 개별 실행 후에만 충돌이 발생했기 때문에 원인을 감지하는 것이 매우 어려웠습니다. 이것은 내가 스크립트를 최대한 강력하게 만든 이후의 일이었습니다. 결국 나는 프로그램이 충돌하지 않을 때마다 개체를 언급하면 발견했습니다.
예를 들어:
이러지 마세요 -
| dt10i << go to( :Event Duration ) << 선택한 열 이동( After( “Event Date” ) ) << go to( 2 ) << 열 선택 지우기; |
대신 이렇게 하세요:
| dt10i << 이동( :Duration ); |
dt10i << 선택한 열 이동( 이후( "날짜" ) );
dt10i << ( 2 )로 이동;
dt10i << 열 선택 지우기;
나는 이 문제가 문서화되어 있는 것을 찾지 못했지만 나는 그것을 격리했고 그것이 내 경우에 프로그램 충돌의 원인이었다고 확신합니다.
Re: JMP 액세스 위반 - 가능한 원인은 무엇입니까?잘못된 메모리 작업이 발생할 때마다 액세스 위반이 발생할 수 있습니다. 특정 패턴을 본 것은 확실하지 않지만 JMP는 테이블 작업에 매우 강력한 것으로 보이므로 아마도 이것이 제가 살펴볼 마지막 장소일 것입니다.물론 문제의 위치를 진단하는 것이 어렵고 지루한 경우 문제입니다.나는 일반적으로 충돌이 발생하기 전에 실행을 중단하기 위해 코드에 Throw()를 배치합니다.그런 다음 Throw의 위치를 이동하여 문제를 일으키는 코드 영역으로 이동할 수 있습니다.때때로 나는 분명히 어리석은 일을 했을 수도 있고, 다른 때에는 그것은 합쳐져서 재앙적인 몇 가지 실수일 수도 있습니다.
여기에 예가 있습니다.유효성 검사 이벤트에 대한 핸들러를 사용하여 모달 창이 생성됩니다. 핸들러는 확인을 클릭할 때 창이 닫혀야 하는지 여부를 나타내는 1 또는 0을 반환합니다.
새창 ( "시험" , << 모달 ,
<< 검증 시 (
txt = 손질 ( 테브 << 문자 받기 ) ;
만약에 ( 길이 ( txt ) > 0 ,
유효하다 = 1
,
유효하다 = 0
) ;
// 반품
유효하다
) ,
라인업 상자 ( NCol ( 1 ) , 간격 ( 10 ) ,
텍스트 상자 ( "무엇이든 입력하세요. 하지만 무엇이든 입력하세요." ) ,
테브 = 텍스트 편집 상자 ( "" )
)
)
이것은 잘 작동합니다. JMP를 충돌시키지 않고 실행할 수 있습니다!함수나 이벤트 핸들러를 작성할 때 마지막으로 평가되는 것은 무엇이 반환되는지입니다(이유를 이해하려면 Glue를 참조하세요).그러나 어느 시점에서 JMP는 "반환"을 더욱 명확하게 만드는 Return 함수를 도입했습니다. 이는 함수와 함께 작동하지만 위와 같은 이벤트 핸들러에서는 작동하지 않습니다.따라서 OnValidate의 마지막 줄에서 isValid를 Return(isValid)로 바꾸면 작동하지 않습니다.하지만 JMP는 충돌하지 않습니다.하지만 실수로 OnClose 이벤트를 사용하면 JMP가 만족스럽지 못하고 액세스 위반이 발생합니다.
// 집에서 이것을 시도하지 마세요
새창 ( "시험" , << 모달 ,
<< 닫을 때 (
txt = 손질 ( 테브 << 문자 받기 ) ;
만약에 ( 길이 ( txt ) > 0 ,
유효하다 = 1
,
유효하다 = 0
) ;
반품 (유효함)
) ,
라인업 상자 ( NCol ( 1 ) , 간격 ( 10 ) ,
텍스트 상자 ( "무엇이든 입력하세요. 하지만 무엇이든 입력하세요." ) ,
테브 = 텍스트 편집 상자 ( "" )
)
)
Re: JMP 액세스 위반 - 가능한 원인은 무엇입니까?한 시간에 두 번이나 같은 문제가 발생했습니다.