पाठ 11 / 25

Assistant के साथ Debugging

Bugs जल्दी खोजने और सुधारने के लिए stack traces, परिकल्पनाओं और प्रयोगों को मिलाएँ।

परिकल्पना, प्रयोग, नतीजा

Assistant को stack trace, उसके आसपास का कोड और आपकी अपेक्षा बनाम जो हुआ दें। संभावना के क्रम में कई संभावित कारण माँगें, फिर print, log या विफल test से एक-एक करके परखें। हर नतीजा वापस दें। जिस "सुधार" को आप नहीं समझते उसे स्वीकार न करें: जो patch लक्षण ग़ायब कर दे वह असली bug छिपा सकता है।

वह bug जिसे assistant अक्सर चूकता है

Mutable default argument calls के बीच साझा होता है। मैंने यह चलाया: ग़लत संस्करण वही list दो बार लौटाता है, सही संस्करण स्वतंत्र lists देता है।

def add_item(x, bucket=[]):          # buggy: one shared list
    bucket.append(x); return bucket
print(add_item(1), add_item(2))

def add_item_ok(x, bucket=None):
    bucket = [] if bucket is None else bucket
    bucket.append(x); return bucket
print(add_item_ok(1), add_item_ok(2))

Output:

[1, 2] [1, 2]
[1] [2]

पहले विफल test लिखें

ठीक करने से पहले bug को test के रूप में दोहराएँ। Test प्रमाणित करता है कि सुधार काम किया और bug को लौटने से रोकता है, और agent उससे अपने patch की पुष्टि कर सकता है।

त्वरित जाँच: जो सुधार आप नहीं समझते उसे स्वीकार करने से क्यों बचें?

  • यह editor को धीमा करता है
  • सुधार हमेशा ग़लत होते हैं
  • Git इसे मना करता है
  • वह लक्षण हटाकर असली bug छिपा सकता है
Answer

वह लक्षण हटाकर असली bug छिपा सकता है — कारण समझना ही बताता है कि समस्या सचमुच हल हुई।