2012-12-27 26 views
9

में वीबी.नेट लाइन नंबर प्राप्त करना मेरे पास एक वीबी.नेट 2010 विनफॉर्म एप्लिकेशन है जहां मैं स्टैक ट्रेस में लाइन नंबर शामिल करना चाहता हूं।स्टैक ट्रेस

how to print out line number during application run in VB.net

कौन सा उल्लेख है "आप हमेशा अपने कोड है, जो जानकारी है कि इस तरह की परिस्थितियों में प्रयोग किया जाता है डिबगिंग शामिल साथ PDB फ़ाइल को शामिल करने की जरूरत है": मैं निम्नलिखित प्रश्न और उत्तर पढ़ा है। उन्नत कंपाइलर सेटिंग्स के तहत मैंने अपनी रिलीज बिल्ड के लिए "पीडीबी-केवल" और "पूर्ण" के रूप में "डीबग जानकारी जेनरेट" की कोशिश की है और पुष्टि की है कि एक ही पीडीबी फ़ाइल उसी एक्सचेंज में उसी एक्सचेंज में जेनरेट की गई है। हालांकि निम्न परीक्षण कोड प्रत्येक ढेर फ्रेम के लिए शून्य की एक पंक्ति संख्या उत्पन्न करता है और एक फ़ाइल नाम वापस नहीं करता है:

Dim st As StackTrace = New StackTrace(ex) 
    For Each sf As StackFrame In st.GetFrames 
     MsgBox("Line " & sf.GetFileLineNumber() & sf.GetFileName) 
    Next 

हालांकि निम्नलिखित कोड सीधे के बाद यह एक अन्यथा अच्छी लग रही स्टैक ट्रेस उत्पन्न करता है तो यह प्रतीत नहीं होता

ExceptionDetails.Text = ex.GetType.ToString & "(0x" & hr.ToString("X8") & "): " & ex.Message & vbCrLf & ex.StackTrace 

मैं परियोजना विन्यास के तहत किसी भी अन्य की संभावना सेटिंग खोजने के लिए नहीं कर पा रहे हैं और अगर कोई अन्य चीजें हैं जो इस समस्या का कारण हो सकता पर विचार किया था सोचा: सामान्य रूप में अपवाद संचालक के साथ एक समस्या हो सकता है। मेरे द्वारा यहां और अन्य जगहों पर खोजे गए सभी समाधान बस यह सुनिश्चित करने के लिए प्रतीत होते हैं कि पीडीबी निष्पादन योग्य के समान पथ में है।

उत्तर

5
निर्माता आप कॉल कर रहे की documentation से

:

StackTrace फोन करने वाले का वर्तमान धागे से बनाया जाता है, और फ़ाइल नाम, लाइन नंबर, या स्तंभ जानकारी नहीं होती है। जो this constructor का उपयोग करता

Dim st As StackTrace = New StackTrace(ex, True) 
बजाय

,: का उपयोग कर

प्रयास करें। दूसरे कन्स्ट्रक्टर पैरामीटर के रूप में वर्णित किया गया है:

फ़ाइल नाम, लाइन नंबर और कॉलम नंबर पर कब्जा करने के लिए सच है; अन्यथा, झूठी।

12

को

public StackTrace(Exception e, bool fNeedFileInfo); 

निर्माता का उपयोग करने और स्थापित करने की कोशिश करें fNeedFileInfo यह सवाल कुछ समय पहले हल किया गया था लेकिन मैंने सोचा कि मैं यह है कि मैं भी शामिल किया गया है अंतिम काम कर समारोह का हिस्सा था हाल ही में मेरी परियोजनाओं में। यह उस बिंदु पर प्रारंभिक अपवाद जानकारी और पूर्ण स्टैक ट्रेस देता है जिसके बाद स्टैक ट्रेस से अपवाद तक पहुंचने वाली लाइन संख्याएं और फ़ाइल नाम होते हैं।

Public Function GetExceptionInfo(ex As Exception) As String 
    Dim Result As String 
    Dim hr As Integer = Runtime.InteropServices.Marshal.GetHRForException(ex) 
    Result = ex.GetType.ToString & "(0x" & hr.ToString("X8") & "): " & ex.Message & Environment.NewLine & ex.StackTrace & Environment.NewLine 
    Dim st As StackTrace = New StackTrace(ex, True) 
    For Each sf As StackFrame In st.GetFrames 
     If sf.GetFileLineNumber() > 0 Then 
      Result &= "Line:" & sf.GetFileLineNumber() & " Filename: " & IO.Path.GetFileName(sf.GetFileName) & Environment.NewLine 
     End If 
    Next 
    Return Result 
End Function 
+1

यह शानदार है। पोस्ट करने का शुक्रिया :) – CrazyTim

संबंधित मुद्दे