Erlang VM'ye sistemde oluşturulan her yeni işlem için bir dizi işlem bayrağı uygulama talimatı vermenin bir yolu var mı?Varsayılan işlem bayrakları
Örneğin, test ortamında, her işlemin save_calls bayrak kümesine sahip olmasını isterim.
Erlang VM'ye sistemde oluşturulan her yeni işlem için bir dizi işlem bayrağı uygulama talimatı vermenin bir yolu var mı?Varsayılan işlem bayrakları
Örneğin, test ortamında, her işlemin save_calls bayrak kümesine sahip olmasını isterim.
Bunu yapmanın bir yolu, Erlang izleme işlevlerini bir .erlang dosyasıyla birleştirmektir.
Özellikle, erlang:trace/3 tarafından sağlanan izleme yetenekleri düşük seviyede kullanabilirsiniz ya da basitçe özel işleyici işlevi, bir izleme mesaj alındığında her zaman yürütür yeni izleme sürecini oluşturmak için dbg:tracer/2 fonksiyonunu yararlanabilir.
Bazı şeyleri otomatikleştirmek için, kodunuzu çalıştırdığınız dizinde veya giriş dizininizde bir Erlang Başlangıç Dosyası oluşturabilirsiniz. Erlang Start Up File, çalışma zamanı sistemini her başlattığınızda çalıştırılan .erlang adlı özel bir dosyadır. aşağıdaki gibi
şey işini yapmalıdır:
% -*- Erlang -*-
erlang:display("This is automatically executed.").
dbg:tracer(process, {fun ({trace, Pid, spawn, Pid2, {M, F, Args}}, Data) ->
process_flag(Pid2, save_calls, Data),
Data;
(_Trace, Data) ->
Data
end, 100}).
dbg:p(new, [procs, sos]).
Temelde, süreçleri (ilk argüman) yazacaktır yeni izleme sürecini, yaratıyorum. Yürütülecek ve bazı ilk veriler için bir işleyici işlevi belirtiyorum. İşleyici işlevinde, diğer tüm izleme iletilerini görmezden gelerek yeni oluşturulan işlemler için save_calls
bayrağını ayarlıyorum.'seçeneğini Başlangıç Verileri parametresini kullanarak 100
olarak ayarlayın. Son çağrıda, sadece yeni oluşturulan süreçlerle ilgilendiğimi dbg'ye söylüyorum. İzleme bayraklarının mirasını sağlamak için sos
(set_on_spawn
) seçeneğini de ayarlıyorum.
Son olarak, ek bir argüman alan (Pid
işaretini ayarlamak istediğiniz işlemin) process_flag
işlevinin bir varyantını kullanmanız gerektiğini unutmayın.