
विंडोज डीबगर इंजन के लिए एक PowerShell फ्रंट-एंड।
विंडोज डीबगर इंजन के लिए एक PowerShell फ्रंट-एंड।
क्या आप टैब करके अपनी महिमा के लिए तैयार हैं? त्वरित परिचय के लिए, Getting Started देखें।
यह परियोजना विंडोज डीबगर टीम द्वारा निर्मित, समर्थित या निगरानी नहीं की गई है। जबकि डीबगर टीम अपने API और फ्रंट एंड (windbg, kd, et al) के बारे में प्रतिक्रिया का स्वागत करती है, उनका इस परियोजना से कोई संबंध नहीं है। इस परियोजना से संबंधित बग या प्रतिक्रिया डीबगर टीम को दर्ज न करें।
यह एक वित्त पोषित परियोजना नहीं है: इसके लिए कोई आधिकारिक संसाधन आवंटित नहीं किए गए हैं, और केवल स्वयंसेवकों द्वारा ही काम किया जाता है। इस परियोजना पर कोई उत्पादन निर्भरता न लें जब तक कि आप इसे पूरी तरह से स्वयं समर्थन करने को तैयार न हों। बेझिझक मुद्दे दर्ज करें और पुल रिक्वेस्ट सबमिट करें, लेकिन समझें कि सीमित स्वयंसेवक संसाधनों के साथ, आपके सबमिशन को संभालने में कुछ समय लग सकता है।
यह एक प्रयोगात्मक परियोजना है: यह पूरी तरह से तैयार नहीं है, और आपको अक्सर ब्रेकिंग बदलावों की उम्मीद करनी चाहिए।
उपरोक्त अस्वीकरणों का परिणाम: मैं उच्च मूल्य के लाइव लक्ष्यों पर DbgShell को अटैच करने से बचूंगा।
https://aka.ms/dbgshell-latest
क्या आपने कभी डीबगर में कुछ स्वचालित करने की कोशिश की है? (cdb/ntsd/kd/windbg) आपके लिए वह कैसा रहा?
DbgShell का मुख्य प्रेरणा यह है कि डीबगर में कुछ भी स्वचालित करना बहुत मुश्किल है। आज डीबगर को स्वचालित करने में सहायता के लिए सुविधाएं मौजूद हैं, बिल्कुल। लेकिन मेरी राय में वे लोगों की जरूरतों को पूरा नहीं कर रही हैं।
DbgShell परियोजना का लक्ष्य ऑब्जेक्ट-आधारित PowerShell दुनिया की अच्छाई को डीबगिंग दुनिया में लाना है। जब आप किसी 'ऑब्जेक्ट' को डंप करने के लिए 'dt' करते हैं, तो आपको एक वास्तविक ऑब्जेक्ट मिलना चाहिए। स्क्रिप्टिंग PowerShell स्क्रिप्ट लिखने जितनी आसान होनी चाहिए।
DbgShell परियोजना dbgeng.dll के लिए एक PowerShell फ्रंट-एंड प्रदान करती है, जिसमें शामिल हैं:
कस्टम होस्ट अभी भी एक कमांड-लाइन (conhost.exe-आधारित) प्रोग्राम है (ntsd/cdb/kd के अनुरूप), लेकिन इसे windbg (!DbgShell) से लागू किया जा सकता है।
स्वचालन को बहुत आसान और अधिक शक्तिशाली बनाने के अलावा, यह अन्य चिंताओं को भी संबोधित करेगा, जैसे कि उन लोगों के लिए उपयोग में आसानी जिन्हें डीबगर्स का उपयोग अक्सर नहीं करना पड़ता है। (एक शिकायत जो मैंने सुनी है वह यह है कि "जब मुझे windbg का उपयोग करने की आवश्यकता होती है, तो मैं अपना सारा समय .CHM में बिताता हूँ")
दूसरी ओर, अनुभवी windbg उपयोगकर्ताओं के लिए, एक अन्य लक्ष्य संक्रमण को यथासंभव निर्बाध बनाना है। इसलिए, उदाहरण के लिए, नामस्थान प्रदाता डेटा तक पहुँचने का एकमात्र तरीका नहीं है; आप अभी भी पारंपरिक कमांड जैसे "~3 s", "k", आदि का उपयोग कर सकते हैं।
मैं केवल उस प्रकार की बात नहीं कर रहा हूँ जहाँ आप एक टेक्स्ट एडिटर खोलते हैं और कुछ जटिल करने के लिए एक बड़ी स्क्रिप्ट लिखते हैं—मैं यह भी बात कर रहा हूँ कि कमांड लाइन पर सीधे अपेक्षाकृत सरल चीजें निकालने में सक्षम होना। ऐसी कई स्थितियाँ हैं जहाँ आप थोड़ी सी तर्कशक्ति का उपयोग करना चाहेंगे, लेकिन इतनी बड़ी या पुन: प्रयोज्य नहीं कि आप इसे सहेजना भी चाहें। बस "एक-लाइनर्स" जैसे "यदि खोला जा रहा फ़ाइल उपयोगकर्ता के डेस्कटॉप पर है और फ़ंक्शन Blah स्टैक पर है तो CreateFile पर ब्रेक लगाएँ" निकालना आसान होना चाहिए।
मुझे स्पष्ट होने दें: मुझे PowerShell के साथ "तालमेल बिठाने" में लगभग 4 साल लग गए। मुझे लगता है कि इसमें तीखे किनारे हैं, ऐसे पहलू जो सीधे कठिन हैं, और डिज़ाइन और कार्यान्वयन दोनों में बहुत सारे बग हैं। कभी-कभी यह वास्तव में मुझे परेशान करता है। हालाँकि, PowerShell के लाभ आकर्षक हैं, और मुझे विश्वास दिलाया है कि यह इस परियोजना के लिए उपयोग करने के लिए सबसे अच्छी चीज़ है:
Get-Command, टैब पूर्णता, फ़ाइल सिस्टम जैसे पदानुक्रमित डेटा को उजागर करने की क्षमता, सहायता प्रदान करने और संश्लेषित करने की सुविधाएँ, बहुत अच्छी हैं।dt" करके एक "ऑब्जेक्ट" को "डंप" करें, और वास्तव में एक ऑब्जेक्ट प्राप्त करें। DbgShell ऐसा करता है।cd" करके फ़ाइल सिस्टम, रजिस्ट्री, AD आदि में जा सकते हैं; आप Send-MailMessage, Get-WmiObject, Invoke-WebRequest, Invoke-RestMethod निष्पादित कर सकते हैं, मनमाना प्रोग्राम चला सकते हैं, आदि।DbgShell लंबे समय से "प्रोटोटाइप मोड" में है। मैंने यह पता लगाने में बहुत समय बिताया है कि कैसे कुछ किया जा सकता है या किया जाना चाहिए, लेकिन जरूरी नहीं कि सब कुछ "पूरा" किया जाए। वर्तमान कोड में भारी संख्या में TODOs हैं। इसलिए हालांकि यह वास्तव में उपयोगी होना शुरू हो गया है, परियोजना अभी भी काफी नई है। हालाँकि, यह निश्चित रूप से आपको यह अच्छा स्वाद देने के लिए पर्याप्त प्रदर्शित कर सकता है कि इसे कैसा होना चाहिए।
नीचे कुछ स्क्रीनशॉट हैं। यह ध्यान रखना महत्वपूर्ण है कि आप जो कुछ भी देखते हैं वह dbgeng टेक्स्ट आउटपुट नहीं है। हालाँकि आउटपुट में कुछ चीज़ें परिचित लगेंगी, ऐसा केवल इसलिए है क्योंकि मैंने PowerShell की फ़ॉर्मेटिंग और आउटपुट सुविधाओं का उपयोग करके यह अनुकूलित किया है कि कुछ ऑब्जेक्ट कैसे प्रदर्शित होते हैं—आप जो भी आउटपुट देखते हैं वह वास्तव में वास्तविक, पूर्ण .NET ऑब्जेक्ट से मेल खाता है। उदाहरण के लिए, वे ModLoad संदेश प्रत्येक एक MS.Dbg.ModuleLoadedEventArgs ऑब्जेक्ट से मेल खाते हैं, जिसमें Out-Default पर भेजे जाने पर प्रदर्शित होने से अधिक गुण होते हैं। dbgeng से किसी भी चीज़ का कोई स्ट्रिंग पार्सिंग नहीं है। (खैर... लगभग। मैंने कुछ समझौते किए हैं जहाँ जानकारी प्राप्त करने का कोई और तरीका नहीं है। उदाहरण के लिए, डिस्सेम्बली सामग्री, या ऑफ़सेट खोजने के लिए एडजस्टर थंक फ़ंक्शन के प्रतीकात्मक नाम को पार्स करना।)
यह एक प्रकार का "हैलो वर्ल्ड" परिदृश्य है: cmd.exe के एक उदाहरण से अटैच करना। मैं पहले PowerShell के अंतर्निहित कमांड Start-Process का उपयोग करता हूँ, फिर आउटपुट को DbgShell कमांड Connect-Process पर पाइप करता हूँ, और फिर नामस्थान में इधर-उधर देखता हूँ:

यहाँ मैंने एक परीक्षण प्रोग्राम से अटैच किया है, और स्टैक को देखा, एक विशेष स्टैक फ्रेम पर स्विच किया, लोकल्स को डंप किया, एक स्थानीय std::map के मान का निरीक्षण किया, और एक स्थानीय एनम मान के लिए कुछ प्रकार की जानकारी का निरीक्षण किया। एन्यूमरेशन मान के प्रदर्शन पर ध्यान दें: DbgShell न केवल एकल एन्यूमरैंड के लिए प्रतीकात्मक नाम खोजने को संभालता है, बल्कि जब कई एन्यूमरैंड को एक साथ OR किया जाता है, तब भी। आप स्क्रीनशॉट से यह नहीं बता सकते, लेकिन इस सब चीज़ों के लिए टैब पूर्णता है।

!dbgshell" चलाएँ।MIT लाइसेंस के तहत लाइसेंस प्राप्त है।
यह परियोजना योगदान और सुझावों का स्वागत करती है। अधिकांश योगदानों के लिए आपको एक योगदानकर्ता लाइसेंस अनुबंध (CLA) से सहमत होना आवश्यक है जो यह घोषित करता है कि आपके पास अधिकार है, और वास्तव में, हमें आपके योगदान का उपयोग करने के अधिकार प्रदान करते हैं। विवरण के लिए, https://cla.microsoft.com पर जाएँ।
जब आप एक पुल रिक्वेस्ट सबमिट करते हैं, तो एक CLA-बॉट स्वचालित रूप से निर्धारित करेगा कि क्या आपको CLA प्रदान करने की आवश्यकता है और PR को उचित रूप से सजाएगा (जैसे, लेबल, टिप्पणी)। बस बॉट द्वारा प्रदान किए गए निर्देशों का पालन करें। आपको हमारे CLA का उपयोग करने वाले सभी रिपॉजिटरी में केवल एक बार ऐसा करने की आवश्यकता होगी।
परियोजना में योगदान के बारे में अधिक जानकारी के लिए Contributing देखें।
इस परियोजना ने Microsoft Open Source Code of Conduct को अपनाया है।
अधिक जानकारी के लिए Code of Conduct FAQ देखें या किसी अतिरिक्त प्रश्न या टिप्पणी के लिए [email protected] से संपर्क करें।
आप यहाँ एक छोटा (3 मिनट) वीडियो परिचय पा सकते हैं: https://youtu.be/ynbg2zZ1Igc