기본 단계는 라이브가 아닌 노드에 있습니다
> dbg:start(). % start dbg
> dbg:tracer(). % start a simple tracer process
> dbg:tp(Module, Function, Arity, []). % specify MFA you are interested in
> dbg:p(all, c). % trace calls (c) of that MFA for all processes.
... trace here
> dbg:stop_clear(). % stop tracer and clear effect of tp and p calls.
당신은 동시에 여러 기능에 추적 할 수 있습니다. 각 기능에 대해 tp
을 호출하여 기능을 추가하십시오. 수출되지 않은 기능을 추적하려면 tpl
으로 전화해야합니다. 기능을 제거하려면 비슷한 방식으로 ctp
또는 ctpl
으로 전화하십시오. 일반적인 일반 호출은 다음과 같습니다.
> dbg:tpl(Module, '_', []). % all calls in Module
> dbg:tpl(Module, Function, '_', []). % all calls to Module:Function with any arity.
> dbg:tpl(Module, Function, Arity, []). % all calls to Module:Function/Arity.
> dbg:tpl(M, F, A, [{'_', [], [{return_trace}]}]). % same as before, but also show return value.
마지막 인수는 일치 사양입니다. dbg:fun2ms
을 사용하면 그걸로 놀 수 있습니다.
p()를 호출하여 추적 할 프로세스를 선택할 수 있습니다. 항목은 erlang : trace에 설명되어 있습니다. 일부 호출은 다음과 같습니다
> dbg:p(all, c). % trace calls to selected functions by all functions
> dbg:p(new, c). % trace calls by processes spawned from now on
> dbg:p(Pid, c). % trace calls by given process
> dbg:p(Pid, [c, m]). % trace calls and messages of a given process
난 당신이 dbg
당신을 위해 거의 모든처럼 직접 erlang:trace
를 호출 할 필요가 없을 것 같아요.
라이브 노드의 황금 규칙은 셸로 추적 출력량 만 생성하여 dbg:stop_clear().
을 입력 할 수있게합니다. :)
나는 흔히 여러 이벤트가 발생하면 자동으로 멈추는 추적 프로그램을 사용합니다. 예를 들어 :
dbg:tracer(process, {fun (_,100) -> dbg:stop_clear();
(Msg, N) -> io:format("~p~n", [Msg]), N+1 end, 0
}).
원격 노드 (또는 여러 노드)에 대한 디버깅을 찾고 있다면, pan
, eper
, inviso
또는 onviso
를 검색합니다.
는 지금까지 쉘 :( –
당신은 사람들은 아마도 때문에에 ... 라이브가 아닌 노드의 기본 단계 말에 * * 아무것도 보내 추적을 얻을 수 없었다 라이브 노드를 사용하면 껍질을 벗기고 잃을 수도 있습니다. –
추적 기능을 사용하려면 시스템에서 일부 리소스가 필요합니다. 자주 이벤트를 추적하면 성능이 저하 될 수 있습니다. 최악의 경우에는 연락이 끊어지고, 그것은 - 붐 -. – Zed