2012-08-03 25 views
6

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.

cevap

1

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.

İlgili konular