2012-04-01 2 views
0

약간의 도움. 방금 debian (./configure, make, make install)에 spidermonkey를 만들었고 js 쉘을 실행하고 clear() 함수를 호출하면 세그먼트 화 오류가 발생합니다. 이것이 왜 또는 어디에서 도움을받을 수 있는지에 대한 생각이 있습니까? 이것은 누구에게 일어 났습니까?clear() 함수를 호출 할 때 spidermonkey가 세그먼트 오류를 ​​발생시키는 이유는 무엇입니까?

$ js
clear(); 인수없이 JS 셸에서 분명히 호출
는 분할 오류
$

+0

클리어(); 모든 걸 지우 죠? JS Shell이 ​​제대로 기능 할 필요가있는 GC가 가장 많이 들었습니다. 이는 기본 동작입니다. 내 리눅스 콘솔에서 같은 오류가 발생한다. –

+0

version()의 출력을 게시 할 수 있다면 knowledgable 영혼이 특별히 당신을 도울 수 있습니다; 내 보고서 185. –

+0

이제 알겠습니다. 이것은 전역 개체에 대해 명확하게 호출했기 때문에 발생합니다. 이것이 샌드 박스 또는 이와 유사한 것을 사용하여 올바르게 작성된 코드에서 호출 된 경우에는 발생하지 않습니다. 샌드 박스는 전역 객체가 아닌 파괴됩니다. –

답변

0

전역 객체를 삭제합니다. 대화식 세션에서 read-eval-print 루프는 이전에 삭제 된 전역 객체에 액세스하려고 시도합니다. 최종 결과 : 세분화 오류. 또한, 전역 객체는 더 이상 존재하지 않습니다.

+0

그래, 이것이 기본 동작입니까? 이것이 기본 동작 인 이유가 있을지 모르지만 실제로 볼 수는 없습니다. 하나는 행동이 "Segmentation fault"보다 조금 더 정교하다고 생각 하겠지만, 그러나 그것을 인식하는 것이 좋습니다. – Edsfault

+0

동의합니다. 그러나 코드가 쉘에 쓰여지는 방식 (이것은 스파이더 맨 키 쉘 기능입니다) 객체를 제공하지 않으면 호출자의 기본 객체가 기본값이됩니다. 이는 샌드 박스를 정리할 때 특히 유용합니다. GC에 전역 객체가 없다는 것을 확인하는 코드가 있어야하지만 clear()를 사용하여 샌드 박스를 정리할 수는 없습니다. –

+0

그러나 이것은 refrence check로 피할 수 있습니다. SpiderMonkey 셸의 버그로 제안 할 수 있습니다. –