我試圖將所有調用記錄到dbg
進行調試(感謝this答案)。下面的代碼:使用`dbg`跟蹤函數時,僅記錄調用跟蹤中的特定參數?
-module(a).
-export([main/0]).
trace_me(_, _, _) ->
ok.
main() ->
dbg:start(),
dbg:tracer(),
dbg:tpl(a, trace_me, 3, []),
dbg:p(all, c),
LargeBinary = binary:copy(<<"foo">>, 10000),
trace_me(foo, bar, LargeBinary).
的問題是爭論的一個是真的大型二進制,並且上面的代碼將打印每一個電話,完整的二進制:
1> c(a).
{ok,a}
2> a:main().
(<0.57.0>) call a:trace_me(foo,bar,<<"foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo...lots of foos omitted...">>)
ok
是否有可能(不修改trace_me/3
):
只打印每個調用的前2個參數?
打印第二個參數+第三個參數的前幾個字節,或者只是在打印之前通過自定義函數傳遞第三個參數?
你有沒有試過我的建議與redbug,或者你是否真的需要DBG? –
@ marco.m對不起,我沒有機會更新你。我真的想要一個解決方案而不添加任何新的依賴關係。感謝您發佈的視頻,我潛入了redbug和dbg的實現中,並編寫了一個小函數,它使用tracer API來執行我想要的操作。我會盡快在這裏發佈解決方案。 – Dogbert