Pdb'den nasıl çıkılır ve programın devam etmesine izin verilir?


111

Bir programda hata ayıklamak için pdb modülünü kullanıyorum. Pdb'den nasıl çıkabileceğimi anlamak ve programın tamamlanana kadar devam etmesine izin vermek istiyorum. Programın çalıştırılması hesaplama açısından pahalı, bu yüzden komut dosyası tamamlanmaya çalışmadan çıkmak istemiyorum. continueişe yaramıyor gibi görünüyor. Pdb'den nasıl çıkıp programıma devam edebilirim?


2
continuedöngülerden returnçıkar, yöntemlerden / işlevlerden çıkar
Stephan

7
@Stephan: continuepdb komutundan bahsediyor . Python ifadesi değil.
voithos

1
@turtle: continueDokümanlara göre " Yürütmeye devam et, yalnızca bir kesme noktasıyla karşılaşıldığında durmalı". İsabet alan bir kesme noktası kümeniz var mı?
voithos

1
Ah. tamam anladım. evet, bir döngü içinde ayarlanmış bir kırılma noktam var. neyse bunu aşmak için? döngü binlerce kez çağrılıyor, bu yüzden devam et tuşuna elle basamıyorum.
turtle

1
@turtle: Pdb içinden ayarlanmış bir kesme noktası var mı, yoksa pdb.set_trace()kaynak kodunuzda bir kesme noktası var mı?
voithos

Yanıtlar:


190

continue"Yürütmeye devam et, yalnızca bir kesme noktasıyla karşılaşıldığında dur", yani bir yerde bir kesme noktası ayarladın. Kesme noktasını kaldırmak için (el ile eklediyseniz):

(Pdb) break
Num Type         Disp Enb   Where
1   breakpoint   keep yes   at /path/to/test.py:5
(Pdb) clear 1
Deleted breakpoint 1
(Pdb) continue

Veya kullanıyorsanız pdb.set_trace(), bunu deneyebilirsiniz (ancak pdb'yi daha süslü şekillerde kullanıyorsanız, bu işleri bozabilir ...)

(Pdb) pdb.set_trace = lambda: None  # This replaces the set_trace() function!
(Pdb) continue
# No more breaks!

10
Yukarıdaki gelmez çıkmak Pdb.
Steve Barnes

7
Sorunun 15. kelimesi hakkında!
Steve Barnes

13
@SteveBarnes: Bence bunu tam anlamıyla alıyorsun. OP sadece tekrar tekrar bir kırılma noktasına ulaşıyor. İhtiyaç duydukları tek şey, uzun soluklu süreçlerine kesme noktalarına ulaşmadan devam etmektir. Pdb'nin gerçekten çalışıp çalışmadığı önemsizdir.
voithos

35
Ayarlama hakkında güzel ipucu set_trace = lambda: None:)
randlet

2
Olağanüstü durumlar için hiçbir şey geçmez set_trace = lambda: None. Python org, sadece pdb'den çıkmanıza izin veren bir komut eklemelidir.
ErezO

26

Basit Ctrl- Dpdb'den çıkacak. Kırmak yerine devam etmek istiyorsanız c, tüm continuekomut yerine sadece tuşuna basın


7
Bir döngü içinde, bir işlevin içindeyken ne olacak? Görünüşe göre benim için bir sonraki döngüye geçiyor ve tüm terminali kapatmadan pdb'yi kapatamıyorum, hatta python'u bile kapatamıyorum?
Marses

@LimokPalantaemon Garip, yazmayı denediniz miexit
Minh Triet

Bu, bir iz ayarlarsanız veya c tuşuna basmaya devam etmediğiniz sürece kesme noktalarınız varsa çalışmaz.
Alex

utanç verici, ama bu beni çok uzun süre
sıkışmaktan kurtardı

7

Cevap Sadece kullandığınız durumda bir alternatif ekleyeceğiz böylece @voithos gelen doğrudur set_trace. Evet, pdb.set_trace = lambda: Nonehack iyi çalışıyor, ancak başka kesme noktalarınız varsa ve daha sonra yeniden etkinleştirmek istiyorsanız değil. Bana göre bu maalesefpdb bir dizi işlevselliğin (görüntüleme listeleri gibi temel şeylerin bile) eksik olduğu ve bu başka bir durum.

İyi haber şu ki pdb++, bunun yerine geçme harika pdbbir şey ve çözdüğü şeylerden biri de tam olarak devre dışı bırakma sorunu set_trace. Böylece şunları yapabilirsiniz:

pip install pdbpp

ve ardından (Pdb++)komut isteminde şunu yazın:

pdb.disable()

Daha sonra yeniden etkinleştirmek isterseniz, şaşırtıcı olmayan bir şekilde bu işe yarar:

pdb.enable()

Kolay! Ve bunun üzerine başka birçok yararlı güzellik de alacaksınız.


4

Hata ayıklayıcıdan gerçekten çıkmak istiyorsanız, WinPdb gibi bir şey çalıştırmanız gerekir. ve ardından hata ayıklayıcıdan çıkmanıza izin veren (NB Bu çoklu platformdur).

Hata ayıklamaya devam etmek istiyor ancak artık belirli bir kesme noktasında durmuyorsanız, yapmanız gerekenler:

  1. Kesme noktası numarasını (veya dosya ve satır numarasını) not edin,
  2. Ya cl bp_number ya clear file:line kalıcı kesme noktası kaldırmak veya disable pb_number devre dışı geçiş yapmak ancak geri geçiş yapabilmek için.
  3. Ardından continueve programınız bir sonraki farklı kesme noktasına ulaşana kadar çalışır .

Yukarıdakiler hakkında daha fazla ayrıntı için kılavuza bakın .


0

hiçbir şey yüklemeden pdb'den çıkmanın yeni bir yolunu bulun: - program çalışmaya başladığında, ctrl + c tuşlarına basın, ardından pencereyi başka bir pencereye (herhangi bir pencereye) geçirin, ardından pdb çalışan orijinal kabuk şöyle bir şey göstermelidir: (pdb) ..... - pdb'ye geri dönün, sonra Enter'a basın, artık hazırsınız, pdb komut kabuğu yeniden beliriyor

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.