ठीक है, आप के आसपास खुदाई का एक सा के बाद यह कर सकते हैं - लेकिन यह सभी मामलों में काम करने के लिए नहीं जा रहा है।
सावधान रहें, यह मैक्रोज़ का उपयोग करता है और इनलाइन प्रतिनिधियों के साथ काम करने की गारंटी नहीं दी जा सकती है; या उन विधियों के साथ जो वास्तव में कुछ वापस करने की आवश्यकता है। जब ब्रेकपॉइंट मारा जाता है तो यह @juergen d और @Erno द्वारा वर्णित प्रक्रिया को स्वचालित करता है; वर्तमान कार्य का अंत कहां है यह जानने के लिए बहुत ही सरल हेरिस्टिक का उपयोग करना।
आपको पहले अपने मैक्रोज़ वातावरण में इस मैक्रो को जोड़ने की आवश्यकता है (वीएस में एएलटी + एफ 11 के साथ खुला)। सही उस पर क्लिक करें और When hit...
मेनू विकल्प मारा - यह कोड शायद के रूप में अच्छा के रूप में मैं सिर्फ यह पता है कि के साथ जगह में ले जाया गया है :)
Sub ExitStack()
'get the last-hit breakpoint
Dim breakPoint As EnvDTE.Breakpoint
breakPoint = DTE.Debugger.BreakpointLastHit()
'if the currently open file is the same as where the breakpoint is set
'(could search and open it, but the debugger *should* already have done that)
If (DTE.ActiveDocument.FullName = breakPoint.File) Then
Dim selection As EnvDTE.TextSelection = DTE.ActiveDocument.Selection
Dim editPoint As EnvDTE.EditPoint
'move the cursor to where the breakpoint is actually defined
selection.MoveToLineAndOffset(breakPoint.FileLine, breakPoint.FileColumn)
Dim codeElement As EnvDTE.CodeElement
codeElement = DTE.ActiveDocument.ProjectItem.FileCodeModel.CodeElementFromPoint(selection.ActivePoint, vsCMElement.vsCMElementFunction)
'if a function is found, move the cursor to the last character of it
If Not (codeElement Is Nothing) Then
Dim lastLine As EnvDTE.TextPoint
lastLine = codeElement.GetEndPoint()
selection.MoveToPoint(lastLine)
selection.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstText)
'execute the SetNextStatement command.
'Has to be done via ExecuteCommand
DTE.ExecuteCommand("Debug.SetNextStatement")
End If
End If
End Sub
के रूप में यह हो सकता है, अब आप अपने ब्रेकपाइंट सेट कर सकते हैं नहीं है (यह केवल वीएस -2010 में विश्वास करता है मेरा विश्वास है)। स्कॉटगू ने this ब्लॉग पोस्ट में इसका वर्णन किया है।
संवाद से, ExitStack
मैक्रो है कि आप बस में चिपकाया है पाते हैं।
भागो डीबगर के साथ कोड जुड़ा हुआ है और जब ब्रेकप्वाइंट मारा जाता है समारोह के कोड के बाकी को छोड़ दिया जाना चाहिए। यह अन्य डीबगर चालों का पालन करना चाहिए - जैसे स्थितियां इत्यादि।
नोट - मैंने this SO का उपयोग किसी समस्या को हल करने के लिए किया था; मूल रूप से मैं सीधे डीबगर की SetNextStatement विधि का आह्वान कर रहा था और यह
मुझे नहीं पता कि कैसे वापस आने वाले तरीकों का व्यवहार किया जाएगा - सिद्धांत रूप में उन्हें उस समय वापस लौटना चाहिए जो स्थानीय मूल्य वापसी स्थानीय है, लेकिन कुछ मामलों में तथ्य यह है कि यह बस काम नहीं करेगा!
समान रूप से यदि ब्रेकपॉइंट एक कोशिश/पकड़ ब्लॉक में है तो यह काम नहीं करेगा - क्योंकि अगली कथन को इसके बाहर कहीं भी सेट करने से पहले प्रयास/पकड़ को बाहर निकालना होगा।
स्रोत
2012-01-19 09:06:35
बहुत अच्छा। मैं अभी भी उम्मीद कर रहा हूं कि किसी के पास गैर-मैक्रो, मूल्य-वापसी वाला उत्तर है, लेकिन यह अब तक का सबसे अच्छा है। –
@ प्रोटेक्टोरोन एक नहीं है - जब तक कि आप अपना खुद का डीबगर नहीं लिखते। यदि कोई विधि स्थानीय चर लौटाती है तो आप इसे वापस करने के लिए स्थानीय का उपयोग करने से पहले स्थानीय सेट करने के लिए घड़ी (या यहां तक कि किसी अन्य मैक्रो का उपयोग भी कर सकते हैं) का उपयोग कर सकते हैं। –