MDbg.exe (.NET Framework Komut Satırı Hata Ayıklayıcı)

NET Framework Komut Satırı Hata Ayıklayıcısı, araç satıcılarının ve uygulama geliştiricilerin, .NET Framework ortak dil çalışma zamanını hedefleyen programlardaki hataları bulmalarına ve düzeltmelerine yardımcı olur. Bu araç, hata ayıklama hizmetleri sağlamak için çalışma zamanı hata ayıklama API kullanır. MDbg.exe'yi yalnızca yönetilen kodda hata ayıklamak için kullanabilirsiniz; yönetilmeyen kodda hata ayıklama desteği yoktur.

Bu araç NuGet aracılığıyla kullanılabilir. Yükleme bilgileri için bkz . MDbg 0.1.0. Aracı çalıştırmak için Paket Yöneticisi Konsolunu kullanın. Paket Yöneticisi Konsolu'nu kullanma hakkında daha fazla bilgi için Paket Yöneticisi Konsolu makalesine bakın.

Paket Yöneticisi isteminde aşağıdakileri yazın:

Sözdizimi

MDbg [ProgramName[arguments]] [options]

Komutlar

Hata ayıklayıcıda olduğunuzda (mdbg> isteminde gösterildiği gibi), sonraki bölümde açıklanan komutlardan birini yazın:

command [arguments]

MDbg.exe komutları büyük/küçük harfe duyarlıdır.

Komut Açıklama
ap[rocess] [sayı] Hataları ayıklanan başka bir işleme geçer veya kullanılabilir işlemleri yazdırır. Numaralar gerçek işlem kimlikleri (PID) değil, 0-dizinli bir listedir.
a[ttach] [pid] Bir işleme iliştirir veya kullanılabilir işlemleri yazdırır.
b[reak] [ClassName.Method | FileName:LineNo] Belirtilen yöntemde bir kesme noktası ayarlar. Modüller sırayla taranır.

- breakFileName:LineNo , kaynaktaki bir konumda bir kesme noktası ayarlar.
- break~number, kısa süre önce x komutuyla görüntülenen bir simge üzerinde kesme noktası ayarlar.
- breakmodülü! ClassName.Method+IlOffset , tam konum üzerinde bir kesme noktası ayarlar.
block[ingObjects] Engelleyici iş parçacıkları olan izleme kilitlerini görüntüler.
ca[tch] [exceptionType] Hata ayıklayıcının, yalnızca işlenmeyen özel durumları değil, tüm özel durumları kesmesine neden olur.
cl[earException] Yürütmenin devam edebilmesi için, geçerli özel durumu işlenmiş olarak işaretler. Özel durumun nedeniyle ilgilenilmediyse, özel durum hızlı bir şekilde yeniden oluşturulabilir.
conf[ig] [option value] Tüm yapılandırılabilir seçenekleri görüntüler ve seçeneklerin isteğe bağlı değerler olmadan nasıl çağrılabileceğini gösterir. Seçenek belirtilirse, geçerli seçenek olarak ayarlanır value . Aşağıdaki seçenekler şu anda kullanılabilir:

- extpath komutu kullanıldığında uzantıları load aramak için yolu ayarlar.
- extpath+ uzantılarını yüklemek için bir yol ekler.
del[ete] Bir kesme noktasını siler.
de[tach] Hata ayıklaması yapılmış bir işlemden ayırır.
d[own] [frames] Etkin yığın çerçevesini aşağı taşır.
Yankı Bir iletiyi konsola yankılatır.
enableNotif[ication] typeName 0|1 Belirtilen tür için özel bildirimleri etkinleştirir (1) veya devre dışı bırakır (0).
ex[it] [exitcode] MDbg.exe kabuğundan çıkar ve isteğe bağlı olarak işlem çıkış kodunu belirtir.
fo[reach] [OtherCommand] Bir komutu tüm iş parçacıkları üzerinde uygular. OtherCommand , bir iş parçacığında çalışan geçerli bir komutdur; foreachOtherCommand tüm iş parçacıklarında aynı komutu gerçekleştirir.
f[unceval] [-adNum] functionName [args ... ] Değerlendirilecek işlevin functionName olduğu geçerli etkin iş parçacığında bir işlev değerlendirmesi gerçekleştirir. İşlev adı, ad alanları da dahil olmak üzere tam olarak nitelenmiş olmalıdır.

-ad seçeneği, işlevi çözümlemek için kullanılacak uygulama etki alanını belirtir. -ad Seçenek belirtilmezse, çözümleme için uygulama etki alanı varsayılan olarak işlev değerlendirmesi için kullanılan iş parçacığının bulunduğu uygulama etki alanına ayarlanır.

Değerlendirilen işlev statik değilse, geçirilen ilk parametre bir this işaretçi olmalıdır. Tüm uygulama etki alanlarında, işlev değerlendirmesi bağımsız değişkenleri için arama yapılır.

Bir uygulama etki alanından değer istemek için değişkenine modül ve uygulama etki alanı adı ön ekini ekleyin; örneğin, funceval -ad 0 System.Object.ToString hello.exe#0!MyClass.g_rootRef. Bu komut, uygulama etki alanındaki 0işlevini System.Object.ToString değerlendirir. ToString yöntemi bir örnek işlevi olduğundan, ilk parametre bir this işaretçi olmalıdır.
g[o] Programın bir kesme noktasıyla karşılaşıncaya, programdan çıkılıncaya veya bir olay (örneğin, işlenmemiş bir özel durum) programın durmasına neden oluncaya kadar devam etmesine neden olur.
h[elp] [command]

-veya-

? [command]
Tüm komutların açıklamasını veya belirtilen bir komutun ayrıntılı açıklamasını görüntüler.
ig[nore] [olay] Hata ayıklayıcının yalnızca işlenmemiş özel durumlarda durmasına neden olur.
int[ercept] FrameNumber Hata ayıklayıcıyı belirtilen bir çerçeve numarasına geri döndürür.

Hata ayıklayıcı bir özel durumla karşılaşırsa, hata ayıklayıcıyı belirtilen kare numarasına geri döndürmek için bu komutu kullanın. Set komutunu kullanarak program durumunu değiştirebilir ve go komutunu kullanarak devam edebilirsiniz.
k[ill] Etkin işlemi durdurur.
l[ist] [modules | appdomains | assemblies] Yüklü modülleri, uygulama etki alanlarını veya derlemeleri görüntüler.
lo[ad] assemblyName Bir uzantıyı aşağıdaki şekilde yükler: Belirtilen derleme yüklenir ve daha sonra türünden statik yöntemi LoadExtensionMicrosoft.Tools.Mdbg.Extension.Extension çalıştırma girişiminde bulunuldu.
log [eventType] Günlüğe kaydedilecek olayları ayarlayın veya görüntüleyin.
mo[de] [option on/off] Farklı hata ayıklayıcı seçeneklerini ayarlar. Hata ayıklama modlarının ve bunların geçerli ayarlarının listesini almak için hiçbir seçenek olmadan kullanın mode .
mon[itorInfo] monitorReference Nesne izleme kilidi bilgilerini görüntüler.
newo[bj] typeName [arguments...] typeName türünde yeni bir nesne oluşturur.
n[ext] Kodu çalıştırır ve sonraki satıra geçer (sonraki satır birçok işlev çağrısı içerse bile).
OpendumppathToDumpFile Hata ayıklama için belirtilen döküm dosyasını açar.
o[ut] Geçerli işlevin sonuna taşır.
pa[th] [pathName] İkililerdeki konum kullanılabilir değilse, belirtilen yolda kaynak dosyalarını arar.
p[rint] [var] | [-d] Kapsamdaki tüm değişkenleri yazdırır (yazdır), belirtilen değişkeni yazdırır (var yazdır) veya hata ayıklayıcı değişkenlerini yazdırır (yazdır-d).
printe[xception] [-r] Geçerli iş parçacığındaki son özel durumu yazdırır. Özel durum zincirinin –r tamamı hakkında bilgi almak için özel durum nesnesinde özelliğin InnerException çapraz geçişini yapmak için (özyinelemeli) seçeneğini kullanın.
pro[cessenum] Etkin işlemleri görüntüler.
q[uit] [exitcode] İsteğe bağlı olarak işlem çıkış kodunu belirterek, MDbg.exe kabuğundan çıkar.
re[sume] [* | [~]threadNumber] geçerli iş parçacığını veya threadNumber parametresi tarafından belirtilen iş parçacığını sürdürür .

threadNumber parametresi olarak * belirtilirse veya iş parçacığı numarası ile ~başlıyorsa, komut threadNumber tarafından belirtilen dışında tüm iş parçacıklarına uygulanır.

Askıya alınmamış bir iş parçacığını sürdürmenin etkisi yoktur.
r[un] [-d(ebug) | -o(ptimize) |-enc] [[path_to_exe] [args_to_exe]] Geçerli işlemi (varsa) durdurur ve yeni bir işlem başlatır. Yürütülebilir bağımsız değişken geçirilmezse, bu komut daha önce komutuyla run yürütülen programı çalıştırır. Yürütülebilir bağımsız değişkeni sağlanırsa, belirtilen program isteğe bağlı olarak sağlanan bağımsız değişkenler kullanılarak çalıştırır.

Sınıf yükleme, modül yükleme ve iş parçacığı başlatma olayları yoksayılırsa (varsayılan olarak yoksayıldıkları gibi), program, ana iş parçacığının il yürütülebilir yönergesinde durur.

Aşağıdaki üç bayraktan birini kullanarak, hata ayıklayıcıyı kodu tam zamanında (JIT) derlemeye zorlayabilirsiniz:

- -d(ebug) iyileştirmeleri devre dışı bırakır. Bu, MDbg.exe için varsayılan değerdir.
- -o(ptimize) kodu hata ayıklayıcı dışında olduğu gibi çalıştırmaya zorlar, ancak hata ayıklama deneyimini de zorlaştırır. Bu, hata ayıklayıcının dışında kullanım için varsayılan değerdir.
- -enc Düzenle ve Devam Et özelliğini etkinleştirir ancak performans isabetine neden olur.
Değişken=değeri ayarlama Kapsam içi herhangi bir değişkenin değerini değiştirir.

Ayrıca, kendi hata ayıklayıcı değişkenlerinizi de oluşturabilir ve onlara kendi uygulamanızdan başvuru değerleri atayabilirsiniz. Bu değerler, özgün değer kapsam dışında olsa bile, özgün değerin tanıtıcıları gibi davranır. Tüm hata ayıklayıcı değişkenleri ile $ başlamalıdır (örneğin, $var). Aşağıdaki komutla onları hiçbir şey olacak şekilde ayarlayarak bu tanıtıcıları temizleyin:

set $var=
Setip [-il] sayı Dosyadaki geçerli yönerge işaretçisini (IP) belirtilen konuma ayarlar. seçeneğini belirtirseniz -il , sayı yönteminde ortak bir ara dil (CIL) uzaklığını temsil eder. Tersi durumda, sayı, bir kaynak satırı numarasını gösterir.
sh[ow] [satırlar] Gösterilecek satırların sayısını belirtir.
s[tep] Yürütmeyi geçerli satırda sonraki işleve taşır veya geçilecek işlev yoksa sonraki satıra taşır.
su[spend] [* | [~]threadNumber] geçerli iş parçacığını veya threadNumber parametresi tarafından belirtilen iş parçacığını askıya alır. threadNumber olarak *belirtilirse, komut tüm iş parçacıklarına uygulanır. İş parçacığı numarası ile ~başlıyorsa, komutu threadNumber tarafından belirtilen iş parçacığı dışındaki tüm iş parçacıklarına uygulanır. İşlem go veya step komutu tarafından çalıştırıldığında askıya alınan iş parçacıklarının çalışması dışlanır. İşlemde askıya alınmamış iş parçacığı yoksa ve go komutunu verirseniz, işlem devam etmeyecektir. Bu durumda, işleme girmek için CTRL-C tuşlarına basın.
sy[mbol] commandName [commandValue] Aşağıdaki komutlardan birini belirtir:

- symbol path ["value"] - Geçerli simge yolunu görüntüler veya ayarlar.
- symbol addpath"value" - Geçerli sembol yolunuz için ekler.
- symbol reload ["module"] - Belirtilen modül için tüm simgeleri veya simgeleri yeniden yükler.
- symbol list [module] - Tüm modüller veya belirtilen modül için şu anda yüklü olan simgeleri gösterir.
t[hread] [newThread] [-nick takma adı] Parametresiz thread komutu, geçerli işlemdeki yönetilen tüm iş parçacıklarını görüntüler. İş parçacıkları genellikle iş parçacığı numaralarıyla tanımlanır; ancak, iş parçacığının atanmış bir takma adı varsa, onun yerine takma ad görüntülenir. bir iş parçacığına -nick takma ad atamak için parametresini kullanabilirsiniz.

- thread-nickThreadName , çalışmakta olan iş parçacığına bir takma ad atar.

Takma adlar sayı olamaz. Geçerli iş parçacığına bir takma ad atandıysa, eski takma ad yenisiyle değiştirilir. Yeni takma ad boş bir dize ("") ise, geçerli iş parçacığına ilişkin takma ad silinir ve iş parçacığına yeni takma ad atanmaz.
u[p] Etkin yığın çerçevesini yukarı taşır.
uwgc[handle] [var] | [adres] Bir tanıtıcıyla izlenen değişkeni yazdırır. Tanıtıcı, ad veya adresle belirtilebilir.
Tesis Şu anda etkin when olan deyimleri görüntüler.

tümünü | num sildiğinizde[num [num...]] - Sayı tarafından belirtilen deyimi veya belirtildiyse all tüm when deyimleri silerwhen.

whenstopReason [specific_condition] docmd [cmd [cmd ...] ] - stopReason parametresi aşağıdakilerden biri olabilir:

StepComplete, ProcessExited, ThreadCreated, , BreakpointHit, ModuleLoaded, ClassLoaded, AssemblyLoaded, , AssemblyUnloaded, ControlCTrapped, ExceptionThrown, UnhandledExceptionThrown, AsyncStop, EvalCompleteNativeStopAttachCompleteUserBreakEvalExceptionRemapOpportunityReached, .

specific_condition aşağıdakilerden biri olabilir:

- number - ve BreakpointHitiçinThreadCreated, eylemi yalnızca aynı değere sahip bir iş parçacığı kimliği/kesme noktası numarası tarafından durdurulduğunda tetikler.
- [!]name - , ModuleLoadedClassLoaded, , AssemblyLoadedAssemblyUnloaded, ExceptionThrown, ve UnhandledExceptionThrowniçin eylemi yalnızca ad stopReason adıyla eşleştiğinde tetikler.

specific_condition diğer stopReason değerleri için boş olmalıdır.
w[here] [] [-c-vderinlik] [threadID] Yığın çerçevelerle ilgili hata ayıklama bilgilerini görüntüler.

- Seçeneği, -v görüntülenen her yığın çerçevesi hakkında ayrıntılı bilgi sağlar.
- Kaç karenin görüntüleneceğini sınırlar için depth bir sayı belirtme. Tüm çerçeveleri görüntülemek için all komutunu kullanın. Varsayılan 100'dir.
- threadID parametresini belirtirseniz, yığınla ilişkili iş parçacığını denetleyebilirsiniz. Varsayılan değer, yalnızca geçerli iş parçacığıdır. Tüm iş parçacıklarını almak için all komutunu kullanın.
x [-cnumSymbols] [module[!pattern]] Modül için ile pattern eşleşen işlevleri görüntüler.

numSymbols belirtilirse, çıkış belirtilen sayıyla sınırlıdır. Desen için (normal ifadeyi gösteren) belirtilmezse ! , tüm işlevler görüntülenir. Modül sağlanmazsa, yüklenen tüm modüller görüntülenir. Semboller (~#), kesme komutu kullanılarak kesme noktaları ayarlamak için kullanılabilir.

Açıklamalar

Derleyicinizin hata ayıklama simgeleri üretmesine neden olan derleyiciye özel bayraklar kullanarak, hataları ayıklanacak uygulamayı derleyin. Bu bayraklar hakkında daha fazla bilgi için, derleyicinizin belgelerine bakın. En iyi duruma getirilen uygulamalarda hataları ayıklayabilirsiniz, fakat bazı hata ayıklama bilgileri eksik olur. Örneğin, birçok yerel değişken görünür olmaz ve kaynak satırları hatalı olur.

Uygulamanızı derledikten sonra, aşağıdaki örnekte gösterildiği gibi bir hata ayıklama oturumu başlatmak için komut istemine mdbg yazın.

C:\Program Files\Microsoft Visual Studio 8\VC>mdbg
MDbg (Managed debugger) v2.0.50727.42 (RTM.050727-4200) started.
Copyright (C) Microsoft Corporation. All rights reserved.

For information about commands type "help";
to exit program type "quit".
mdbg>

İstem mdbg> , hata ayıklayıcıda olduğunuzu gösterir.

Hata ayıklayıcıya girdikten sonra, önceki bölümde açıklanan komutları bağımsız değişkenleri kullanın.

Ayrıca bkz.