오류 메시지 - 어느 줄에서 발생했나요?JMP는 사용자가 코드의 오류를 찾는 데 도움을 줍니다. 코드에서 확인되지 않은 이름이 사용된 경우, JMP는 평가를 중단하고 오류가 있는 코드 줄을 가리키는 오류 메시지를 표시합니다.
print(1);
result = x + zzz_missing;

코드에 약간의 변경을 해 보겠습니다. JMP가 이 코드를 실행하면 어떻게 될까요?
myFunc = Function( {x},
{},
result = x + zzz_missing;
Return( result );
);
myFunc( 3 );
다시 오류 메시지가 표시됩니다.

하지만 오류는 x가 정의된 코드의 3번째 줄을 가리킵니다. 이는 매우 놀라운 사실입니다. 오류는 4번째 줄에서 발생합니다. 사용자가 결과를 보호하기 위한 이름 expr() 함수를 누락했고, JMP가 실수로 해당 표현식을 평가해 버린 것입니다!
이 동작에 대해서는 이미 다른 게시물( 오류 추적: JMP가 "도움"을 주려고 시도함 )에서 논의했으므로, 바로 다음 놀라운 사실로 넘어가겠습니다.
사실, 이 코드에 대한 오류 메시지는 더욱 놀랍습니다.
myFunc = Function( {x},
{Default Local},
result = x + zzz_missing;
Return( result );
);
myFunc( 3 );

-> 해당 노선에 대한 정보가 전혀 없다고요?! - 잘못된 정보조차도요.
왜?
자동화 및 스크립팅제목: 오류 메시지 - 어느 줄에 오류가 있나요?Try() 함수에도 동일한 제약 조건이 있습니다. 즉, 코드 줄에 대한 정보가 제공되지 않습니다.
Try(
result = zzz_missing;
Print( 1 );
,
Print( exception_msg )
);

제목: 오류 메시지 - 어느 줄에 오류가 있나요?명령어가 있나요?
- 로그 캡처() 또는 트라이() 와 같이, 괄호 안의 표현식에 오류가 있어도 멈추지 않는 함수들
- 오류를 발생시키는 코드 줄을 반환하는 것은 무엇입니까?
제목: 오류 메시지 - 어느 줄에 오류가 있나요?로그 캡처
스크립팅 인덱스에 따르면, 이 함수는 로그에 출력되는 내용을 캡처하여 문자열로 반환합니다.

하지만 이 제품은 그 이상의 기능을 제공합니다!
이는 노력하다() 함수와 유사하게 작동하며, 평가되는 표현식 내에서 치명적인 오류가 발생한 후에도 코드 실행을 계속할 수 있도록 합니다.
log=Log capture(
result = zzz_missing;
print(1)
);
Print(2);
Show(log)
print(1) 은 건너뛰고 print(2)가 실행됩니다.

거의 완벽합니다. 하지만 아쉽게도(!) 오류가 발생하는 코드 줄을 적어주지 않네요!
제목: 오류 메시지 - 어느 줄에 오류가 있나요?아: 빈스 팔러 의 오류 유형

@Ryan_Gilmore 님 , 투표 요청을 다시 활성화해 주시겠어요?
@Ben_BarrIngh , @russ_wolfinger 님 , 참고하세요.
제목: 오류 메시지 - 어느 줄에 오류가 있나요?이 요청을 이 요청과 합쳐주시면 좋겠습니다.
오류 발생 시 로그에 JSL 스택 추적 기능이 개선되었습니다.
제목: 오류 메시지 - 어느 줄에 오류가 있나요?그런데 예외 메시지에 어떤 내용이 반환되는지 아시는 분 계신가요?

1?
2?
제목: 오류 메시지 - 어느 줄에 오류가 있나요?JSL 코드가 "자식 실행"을 트리거할 수 있나요? 그리고 그 자식 실행은 오류가 발생한 줄에 대한 오류 메시지와 함께 종료될 수 있나요?
그리고 메인 코드는 여전히 남아 자식 프로세스의 실행이 완료된 후 또는 자식 프로세스의 실행이 종료된 후에도 계속 실행되는 것입니까?
제목: 오류 메시지 - 어느 줄에 오류가 있나요?// demo command
MyExpr = Expr(
Print( 1 );
z = 5;
x = xyz;
Print( 2 );
);
stopnow = 0; // if there is an error, don't execute subsequent blocks of code
summary = "";
// execute blocks of code and collect replies and error messages
For Each( {part, line}, Name Expr( myExpr ),
Try(
Eval( Name Expr( part ) );
new = "";
,
new = "part " || Char( line ) || ": " || Char( Name Expr( part ) ) || "\!n" || Char( exception_msg );
stopNow = 1;
);
Wait( 0 );
summary = summary || new || (tmp = Char( Get Log( -1 )[1] ) ; If( tmp == "/*:", "", "\!N" || tmp || "\!N" ));
Clear Log();
If( stopnow, break() );
);
Show(summary);

코드 블록당 응답이 1개 이하인 간단한 코드라고 가정합니다.
더욱 복잡한 코드에서도 작동하도록 쉽게 확장할 수 있습니다.