2012-01-22 5 views
2

에 의해 SpiderMonkey에서 스레드 디버깅 덤프를 사용하려고합니다. jsinterp.cpp 파일을 편집하고 있습니다. 다음과 같이 기본적으로, 나는 을하려고하고있는 사항은 다음과 같습니다스파이더 맨 키 스레딩

  1. 캐치 해석의 메인 루프 전에 JSScript()가 시작됩니다.
  2. 별도의 스레드를 엽니 다.
  3. 해당 스레드에서 스크립트를 사용하여 js_Disassemble을 호출하여 기계 코드를 가져옵니다.
  4. 파일에 기계 코드를 씁니다.

스레드 버전을 시도한 이유는 단순히 성능이 인 경우입니다. disassmeble을 실행하고 같은 스레드에서 출력을 작성하면 일부 애드온이 "응답하지 않음"이됩니다. 단일 스레드에서 일부 출력을 얻을 수 있지만 너무 느립니다.

스레드 만들기를위한 https://developer.mozilla.org/en/Making_Cross-Thread_Calls_Using_Runnables 의 자습서를 따랐습니다. 그러나 그것을 만들었을 때 11 "해결되지 않은 외부 기호 오류가 발생했습니다." 다시 몇 가지 인터넷 검색 후, 나는 약 # XPCOM_GLUE #define에 의해 XPCOM_GLUE 설정 발견했다. 그러나 이번에는 새로운 문제에 직면 : "기본 클래스 nsRunnable 정의되지"입니다. 이것에 대한 해결책을 찾기 위해 을 찾을 수 없습니다.

도움을 주시면 감사하겠습니다. 감사합니다,

답변

0

안전하게이 작업을 위해 별도의 스레드를 사용할 수 없습니다. 가비지 수집은 주 스레드에서 실행될 수 있으며 아래에서 JSScript을 수집합니다. 그런 다음 프로세스가 중단됩니다. 브라우저가 <script>을 실행하거나 기능 또는 onclick= 이벤트 리스너를 호출 여부를

js_Interpret는 SpiderMonkey를 인터프리터를 입력 할 때마다 호출된다. 그래서 아마 같은 스크립트를 여러 번 버리게 될 것입니다. 어쩌면 그렇게 느린 이유 일 수 있습니다. 컴파일시에 바이트 코드를 덤프하는 것을 고려하십시오.