2014-06-11 2 views
2

내 패키지의 일부 코드를 프로파일 링하려고합니다. REPL (기본값 CL-USER 패키지에서)의 (require :sb-sprof) 인 경우 작동합니다. 그러나, 내 패키지 내 코드에 넣으면 Package SB-SPROF does not exist 오류가 발생합니다.내 패키지에 SBCL의 프로파일 러 사용

defpackage(:import-from #:sb-sprof with-profiling) 지시어를 넣으면 The name "SB-SPROF" does not designate any package이됩니다.

그래서 프로파일 링을 어떻게 활성화 할 수 있습니까?

+0

실제 문제를 실제로 진단 할 수있는 표현, 실행 및 실제 오류가 부족합니다. –

답변

3

자신의 패키지 defpackage을 수행하기 전에 require을 평가해야합니다. defpackage은 자동으로 requireSB-PROF 모듈을 자동으로 선택하지 않습니다. require을 이미지에 모듈을로드하는 "멋진"load라고 생각하십시오. 로드하는 동안 모듈의 패키지가 생성되고 그 후에 만 ​​defpackage 또는 리더 (sb-sprof:with-profiling)를 통해 패키지를 참조 할 수 있습니다.

가끔 do itright (또는 "원샷"솔루션 인 경우) 작은 "loadup.lisp"스크립트를 사용하여 모든 종속성이 있는지 확인한 다음 내 자신의 코드를로드합니다. 이것은 또한 이미지가 신선한 리스프에서 확실하게 재생 될 수 있음을 보장합니다.

;; Make sure, the dependencies are present 

(ql:quickload '(whatever))    ;; Load a dependency via Quicklisp 
(require :sb-something-else)   ;; ... or via some implementation-dependent repository 
(asdf:oos 'asdf:load-op 'some-module) ;; ... or via ASDF or ... or ... or ... 

;; Now, load my own stuff 

(load "packages") 
(load "something-important-1") 
... 

이러한 작업의 순서가 중요의 라인을 따라

뭔가; 패키지가 올바르게로드되기 전에 패키지 선언의 종속성 모듈에서 패키지를 참조 할 수 없습니다.

+0

''in-package '로 패키지로 전환하면 어떤 변화가 생기므로 나중에 모듈을''요구할 수 없습니까? – tempestadept

+0

왜 필요하지 않습니까? 'defpackage'의': import-from' 옵션은 ** 아무것도 요구하지 않습니다 **; 이미지에 이미로드 된 내용 (패키지, 심볼)을 기대합니다! 정확한 오류가 무엇입니까? 언제 그런 일이 일어 납니까? – Dirk

+0

'(in-package # : my-package)'다음에'(require : sb-sprof)'를 호출하면 COMPILE-FILE 중에 READ 오류가 발생합니다 : 패키지 SB-SPROF가 존재하지 않습니다. ' – tempestadept