2009-10-26 12 views
10

Bir çocuk işlemi oluşturmak için subprocess.Popen'u kullanan kodun hata ayıklama yolunu bulmaya çalışırken Eclipse/PyDev kullanıyorum: Oluşturulan alt işlemin hatalarını ayıklamak istiyorum. Sorun şu ki, süreç sınırları arasında hata ayıklamanın bir yolunu bulamıyorum ve bunun aslında mümkün olmadığını tahmin ediyorum. Yine de, sen sorana kadar asla bilemezsin, ve ben de yapıyorum!Pydev kullanarak bir alt işlemde hata ayıklamanın bir yolu var mı?

Biraz arka plan: Ben ayıklama ünitesi testi hataları bu süreçlerin içine takılmak istiyorum: Ben gerektiği gibi nose dışarı arayarak bizim birim testleri çağırır Waf tarafından tahrik karmaşık yapı süreç var. Doğrudan burnu çalıştırmayı deneyebileceğimi biliyorum ama problem, modüllerimizin doğru şekilde yüklenmesi için yapılandırmam gereken ortamın oldukça karmaşık ve bunu önlemek için kodu çoğaltmak istemiyorum.

remote debugging modunun farkındayım ancak uzaktaki hata ayıklayıcısını el ile çağırmam gerektiğinden bu oldukça rahatsız edici. Birisi benim yapmaya çalıştığım şeyi yapmanın bir yolunu biliyorsa, çok takdir edilecektir.

+0

Bu soru ve cevapları oldukça eskidir, ancak Raphael'in şu an kabul edilen cevabı yerine cevabı kabul ettiğinizi belirtmek isterim. Raphael'in cevabı verildiğinde doğru olabilirdi, ama pimlottc'un cevabı kesinlikle doğru ve şimdi çok faydalı. – skrrgwasme

cevap

4

PyDev'in yapamayacağı (PyDbg ve WinDbg'nin yapamadığı) görünmüyor, ancak gdb'nin şu şekilde göründüğü görünüyor: http://wiki.python.org/moin/DebuggingWithGdb.

+0

Çatalı alt süreçlere göre takip edebilir mi yoksa sadece alt işlemlere manuel olarak bağlanmayı mı önerirsin? GDB'nin python yığınlarını inceleyebileceğini öğrenmek ilginç: Ben bunu bilmedim :) – jkp

+0

Sadece işleme manuel olarak eklemeyi öneririm. –

+1

Bu arada, el ile takılması gereken sınırlama aslında Unix sistemlerinin nasıl çalıştığı ve belirli bir dile ya da hata ayıklayıcıya özgü olmayan bir sonucudur. –

3

Sizin için çalışabilecek bir geçici çözüm buldum.

Sizin gibi, ilk olarak, istenen kesme noktalarında pydevd.settrace() öğesine çağrıları manuel olarak ekleme uzaktan hata ayıklama seçeneğini buldum. Ama aynı zamanda, daha sonraki PyDev sınır noktalarının (yani, sol kenar boşluğuna tıklayarak oluşturulanlar) uyulduğunu fark ettim. Öyleyse, işlem için uzaktan hata ayıklama oturumu kurmak için ilk açık çözüm çağrısı ihtiyacım var gibi görünüyor ve daha sonra sadece normal hata ayıklayıcı kesme noktalarını kullanın.

Dahası, aslında sürecini askıya almaması için settrace çağrıyı değiştirebilirsiniz:

import pydevd 
pydevd.settrace(suspend=False) 

Yani bir yerde erken alt sürecin başlatılması yukarıdaki kodu eklemek ve iyi olmalıdır. Hala bir kesmek, ama kesinlikle manuel yöntemden daha iyidir.

+1

Ayrıca, alt bölgelere uygulanacak ek bir bayrak da var, ama bu benim için güvenilir bir şekilde işe yaramadı: pydevd.settrace (suspend = False, trace_only_current_thread = False) – pimlottc

+0

PyDev 1.6.4'ten itibaren, izleme alt siteleri çalışıyor benim için iyi. Pydev.settrace (...) çağrısı ana iş parçacığına yerleştirilir. –

İlgili konular