SORU
25 EYLÜL 2008, PERŞEMBE


Çalışan bir Python yığın izlemesi uygulama gösteren

Zaman zaman takılıyor bu Python uygulaması var ve nerede bulabilirim.

Python yorumlayıcısı seni çalıştıran tam kodunu göstermek için sinyal için herhangi bir yolu var mı?

On-the-fly stacktrace falan mı?

İlgili sorular:

CEVAP
25 EYLÜL 2008, PERŞEMBE


Süreç uzun süre çalıştırması bu gibi durumlar için kullanıyorum modül var ama bazen bilinmeyen ve irreproducible nedenlerle takılıyor. Unix üzerinde biraz hacky ve sadece kendi işleri (sinyalleri gerektirir):

import code, traceback, signal

def debug(sig, frame):
    """Interrupt running process, and provide a python prompt for
    interactive debugging."""
    d={'_frame':frame}         # Allow access to frame object.
    d.update(frame.f_globals)  # Unless shadowed by global
    d.update(frame.f_locals)

    i = code.InteractiveConsole(d)
    message  = "Signal received : entering python shell.\nTraceback:\n"
    message  = ''.join(traceback.format_stack(frame))
    i.interact(message)

def listen():
    signal.signal(signal.SIGUSR1, debug)  # Register handler

Kullanmak için, sadece çağrı() dinle programınızı (site.py tüm python programları kullanmasını sağlamak taksan bile) başlar, ve çalışmaya bırakın noktada işlev. Herhangi bir noktada, süreci SIGUSR1 sinyali kullanarak öldürmek, ya da python ile gönder:

    os.kill(pid, signal.SIGUSR1)

Bu program python şu anda, yığın izleme ve değişkenleri işlemek için izin size gösterilen bu noktada konsola kırılmasına neden olur. Çalışan (gerçi muhtemelen tamamen non-müdahaleci değil mi yani sinyal noktada I/O vb. herhangi bir kesmeyi unutmayın devam etmek için control-d (EOF) kullanın

Aynı şeyi yapan başka bir senaryom var, bir boru (vb backgrounded süreçleri hata ayıklama için izin) ile çalışan süreci ile iletişim kuran hariç. Burada büyük bir post, ama python cookbook recipe olarak ekledim.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Harvest: Greg Laurie

    Harvest: Gre

    6 HAZİRAN 2006
  • sknbp

    sknbp

    16 Kasım 2006
  • YAN TV

    YAN TV

    20 EKİM 2011