คำถามติดแท็ก pdb

15
การดีบักแบบทีละขั้นตอนด้วย IPython
จากสิ่งที่ฉันได้อ่านมีสองวิธีในการดีบักโค้ดใน Python: ด้วยการดีบักแบบดั้งเดิมเช่นหรือpdb ipdbสิ่งนี้รองรับคำสั่งเช่นcfor continue, nfor step-over, sfor step-intoฯลฯ ) แต่คุณไม่มีสิทธิ์เข้าถึงโดยตรงไปยัง IPython shell ซึ่งมีประโยชน์อย่างมากสำหรับการตรวจสอบวัตถุ ใช้ IPythonโดยฝังเปลือก IPython ในรหัสของคุณ คุณสามารถทำได้from ipython import embedจากนั้นใช้embed()รหัสของคุณ เมื่อโปรแกรม / สคริปต์ของคุณพบembed()คำสั่งคุณจะถูกดร็อปเข้าสู่เชลล์ IPython สิ่งนี้จะช่วยให้การตรวจสอบวัตถุและการทดสอบรหัส Python เต็มรูปแบบโดยใช้สินค้า IPython ทั้งหมด อย่างไรก็ตามเมื่อใช้งานembed()คุณจะไม่สามารถทีละขั้นตอนในรหัสอีกต่อไปด้วยแป้นพิมพ์ลัดที่มีประโยชน์ มีวิธีใดบ้างที่จะรวมสิ่งที่ดีที่สุดของทั้งสองโลกเข้าด้วยกัน? กล่าวคือ สามารถ ทีละขั้นตอนผ่านรหัสของคุณด้วยแป้นพิมพ์ลัด pdb / ipdb ที่มีประโยชน์ ในขั้นตอนดังกล่าวใด ๆ (เช่นเกี่ยวกับคำสั่งที่กำหนด) มีการเข้าถึงที่เต็มเปี่ยมIPython เปลือก การดีบัก IPython เหมือนกับใน MATLAB: ตัวอย่างของประเภทของ …
170 python  debugging  emacs  ipython  pdb 

6
วิธีการใช้งานคำสั่งหลายบรรทัดภายในดีบักเกอร์ของ Python (PDB)
ดังนั้นฉันจึงเรียกใช้สคริปต์ Python ที่ฉันเรียกดีบักเกอร์ Python, PDB โดยการเขียน: import ipdb; ipdb.set_trace() (PDB เวอร์ชัน iPython แต่สำหรับเรื่องที่ฉันไม่คิดว่ามันสร้างความแตกต่างฉันใช้มันเพื่อผลสีเท่านั้น) ตอนนี้เมื่อฉันไปที่ debugger ฉันต้องการที่จะดำเนินการคำสั่งหลายบรรทัดเช่นถ้าประโยคหรือสำหรับลูป แต่ทันทีที่ฉันพิมพ์ if condition: และกดปุ่มย้อนกลับฉันได้รับข้อความแสดงข้อผิดพลาด *** SyntaxError: invalid syntax (<stdin>, line 1) หนึ่งสามารถดำเนินการคำสั่งหลายบรรทัดภายใน PDB ได้อย่างไร ถ้าเป็นไปไม่ได้มีวิธีแก้ไขปัญหานี้ยังคงดำเนินการประโยคถ้าหรือห่วง?

10
วิธีที่ถูกต้องในการดีบักในโน้ตบุ๊ก iPython คืออะไร?
ดังที่ฉันทราบ%debug magicสามารถทำการดีบักภายในเซลล์เดียว อย่างไรก็ตามฉันมีการเรียกใช้ฟังก์ชันในหลายเซลล์ ตัวอย่างเช่น, In[1]: def fun1(a) def fun2(b) # I want to set a breakpoint for the following line # return do_some_thing_about(b) return fun2(a) In[2]: import multiprocessing as mp pool=mp.Pool(processes=2) results=pool.map(fun1, 1.0) pool.close() pool.join สิ่งที่ฉันพยายาม: ฉันพยายามตั้งค่า%debugในบรรทัดแรกของเซลล์ -1 แต่จะเข้าสู่โหมดดีบักทันทีก่อนที่จะเรียกใช้เซลล์ -2 ผมพยายามที่จะเพิ่มในเส้นขวาก่อนรหัส%debug return do_some_thing_about(b)แต่แล้วรหัสก็ทำงานตลอดไปไม่หยุด วิธีที่ถูกต้องในการตั้งจุดพักภายในโน้ตบุ๊ก ipython คืออะไร?

5
จะออกจาก pdb และอนุญาตให้โปรแกรมดำเนินการต่อได้อย่างไร
ฉันใช้โมดูล pdb เพื่อดีบักโปรแกรม ฉันต้องการทำความเข้าใจว่าฉันจะออกจาก pdb ได้อย่างไรและอนุญาตให้โปรแกรมดำเนินการต่อไปจนเสร็จสิ้น โปรแกรมมีค่าใช้จ่ายในการคำนวณสูงดังนั้นฉันจึงไม่ต้องการออกโดยที่สคริปต์ไม่พยายามทำให้เสร็จสมบูรณ์ continueดูเหมือนจะไม่ทำงาน ฉันจะออกจาก pdb และดำเนินการต่อกับโปรแกรมของฉันได้อย่างไร
111 python  pdb 

13
วิธีที่ง่ายกว่าในการใส่เบรกพอยต์ PDB ในโค้ด Python
เพียงคำถามเพื่อความสะดวก ฉันเอาแต่ใจกับดีบักเกอร์ใน IDE เช่น Visual Studio และ XCode ฉันพบว่ามันค่อนข้างงุ่มง่ามที่จะต้องพิมพ์import pdb; pdb.set_trace()เพื่อตั้งค่าเบรกพอยต์ (ฉันไม่ควรนำเข้า pdb ที่ด้านบนของไฟล์เพราะฉันอาจลืมและทิ้งไว้) มีวิธีที่ง่ายกว่าในการตั้งค่าเบรกพอยต์ในโค้ด Python ตรงไปตรงมาและไม่สร้างความรำคาญเหมือนกับที่คุณเห็นใน IDE หรือไม่?
108 python  pdb 

4
ฉันจะจัดการตัวแปรที่ชื่อขัดแย้งกับคำสั่ง PDB ได้อย่างไร
รหัสของฉันดีขึ้นหรือแย่ลงเต็มไปด้วยตัวแปรตัวอักษรตัวเดียว (มันเป็นเรื่องของฟิสิกส์ดังนั้นตัวอักษรเหล่านั้นจึงมีความหมาย) เช่นเดียวกับ NumPy ที่ฉันมักจะโต้ตอบด้วย nเมื่อใช้ดีบักหลามบางครั้งฉันจะต้องการดูที่มูลค่าของการพูด, อย่างไรก็ตามเมื่อฉันกดn<enter>นั่นคือคำสั่ง PDB (n)extซึ่งมีลำดับความสำคัญสูงกว่า print nมองไปรอบ ๆ แต่ฉันจะตั้งค่าได้อย่างไร
95 python  pdb 

4
การตั้งค่าเบรกพอยต์ด้วยตัวเลือก nosetests --pdb
nosetests --pdbให้ฉันหยุดเมื่อเกิดข้อผิดพลาดหรือล้มเหลว แต่มันสายเกินไปสำหรับความต้องการของฉัน การก้าวผ่านโค้ดระหว่างการดำเนินการช่วยให้ฉันแก้ไขจุดบกพร่องที่เกิดปัญหาได้ อย่างไรก็ตามการทดสอบ nosetests มีประโยชน์เนื่องจากอนุญาตการทดสอบที่อาศัยการนำเข้าแบบสัมพัทธ์ (เช่นการทดสอบในแพ็คเกจ) ฉันจะตั้งค่าเบรกพอยต์ก่อนดำเนินการทดสอบได้อย่างไร ตอนนี้ฉันใช้: python -m pdb /path/to/my/nosetests testfile.py วิธีนี้ไม่เพียงพอ การทดสอบ Nosetests รบกวนเอาต์พุต pdb และการควบคุมแป้นพิมพ์ของฉัน (เช่นปุ่มลูกศร) เสีย ใช้นำเข้า pdb; pdb.set_trace () ดูเหมือนจะเป็นความคิดที่ดีอย่างไรก็ตามการทดสอบ nosetests กำลังบล็อกการเข้าถึงคอนโซล pdb ของฉัน
88 python  testing  nose  pdb 

5
python pdb - ข้ามลูป
ฉันจะข้ามการวนซ้ำโดยใช้pdb.set_trace()? ตัวอย่างเช่น, pdb.set_trace() for i in range(5): print(i) print('Done!') pdbแจ้งก่อนลูป ฉันป้อนคำสั่ง ค่า 1-5 ทั้งหมดจะถูกส่งกลับจากนั้นฉันต้องการได้รับแจ้งpdbอีกครั้งก่อนprint('Done!')ดำเนินการ
88 debugging  pdb 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.