JavaScript 라이브러리 (긴 텍스트로 은가되어야 함)를 사용해야하는 Mac OSX (10.8) 용 Cocoa 앱을 개발 중입니다.Cocoa/Mac : JavaScript 38 번째 호출에서 코어 크래시가 발생했습니다.
데모 애플리케이션에서 모든 것이 잘된 것처럼 보였지만 프로젝트에 코드를 통합하는 동안 문제없이 37 번만 호출 한 다음 38 번째 시간을 충돌 할 수 있습니다.
JS 코드를 호출하기 위해 Apple의 JSWrappers.m (JavaScriptCoreHeadStart 예제)을 사용하고 있습니다. 위에서 언급 한 바와 같이, 그것은 상관없이 입력이 무엇이라고하지 않습니다 38 시간 -callStringJSFunction:withParameters:
에 충돌
JSObjectCallAsFunction(self.jsContext, jsFunction, NULL, argumentCount, arguments, NULL);
(이것은 모든 입력 문자열로 충돌하고, (A EXC_BAD_ACCESS와) 충돌 선은 # 149입니다 37 개의 이전 반복에서 사용되는 경우 동일한 문자열이 작동 함). EXC_BAD_ACCESS는 입력 변수에 의해 액세스되지 않으므로 (예 : 해당 행 바로 앞에
self.jsContext
이 호출 됨) 작동합니다. 즉, 충돌을 일으키는 함수 호출 자체입니다.
우리는이 문제의 원인에 대해 잘 모르고 더 많은 디버깅 방법을 모릅니다. 누구도 힌트를 가지고 있습니까? 감사합니다. .
// EDIT
나 자신을 수정해야합니다 : 그것은 너무 "데모 애플리케이션"에서 작동하지 않습니다. 우리는 함수가 호출 될 때마다 JSWrappers 개체를 다시 만들기 (새로운 JSGlobalContext) 경우에도이 경우, 코드는 우리가 전화를 38 시간을 충돌 -callStringJSFunction:withParameters:
// EDIT2
, 그것은 충돌하지 않습니다 더 이상. 그러나 이로 인해 코드가 훨씬 느려집니다 (JS 인터프리터가 매번 스크립트를 읽어야하므로 당연한 결과입니다.
는 // EDIT3는
또 다른 발견 : 32 비트에서 응용 프로그램을 구축하는 코드 충돌한다. 대신 64 비트로 작성하면 완벽하게 작동합니다. JS 코드는 언제든지 문제없이 실행됩니다. 이것은 이상합니다. JavaScript 코어 프레임 워크 자체의 버그 일 수 있습니까?
나는 비슷한 것을 실행 중입니다. 내가 복제 할 수있는 레이더가 있니? – Simon
@ 시몬 죄송하지만, 그렇지 않습니다. 그러나, 나는 JavaScript Core, 아마도 메모리와 관련된 버그라고 확신한다 (나의 JS 라이브러리는 꽤 컸다). – Qualcuno