VB 6'da aşağıdaki C koduna benzer bir şeyi nasıl yapabilirim?Hata Ayıklama Modu VB 6'da mı?
#ifdef _DEBUG_
// do things
#else
// do other things
#end if
VB 6'da aşağıdaki C koduna benzer bir şeyi nasıl yapabilirim?Hata Ayıklama Modu VB 6'da mı?
#ifdef _DEBUG_
// do things
#else
// do other things
#end if
Alışık olduğunuz diğer dillerle hemen hemen aynı. sözdizimi şu şekildedir:
#If DEBUG = 1 Then
' Do something
#Else
' Do something else
#End If
kişiyi ne zaman sözdizimi derleme zamanı şart pound ile başlar dışında tam VB 6 diğer akış kontrol deyimleri aynı olduğunu hatırlarsanız hatırlamak kolay işareti (#
).
Hile aslında DEBUG
(veya her neyse) sabitini tanımladığından, varsayılan olarak tanımlı olmayan bir tane olduğundan eminim.
her kaynak dosyasının en üstünde sabit tanımlamak için #Const
anahtar kelime kullanın: bunu yapmanın iki standart yolu vardır. Bu şekilde oluşturduğunuz tanım tüm kaynak modülü boyunca geçerlidir. Projenin özelliklerinde sabit Set
#Const DEBUG = 1
: Aşağıdaki gibi bir şey olmazdı. Bu, tüm proje boyunca geçerli bir sabit tanımlayacaktır (ve muhtemelen bir "Hata Ayıklama" modu göstergesi için istediğinizdir).
Bunu yapmak "Proje Özellikleri" iletişim kutusunun "yapma" sekmesinde "Koşullu Derleme Sabitler" metin kutusuna aşağıdaki gibi bir şey girmek için:DEBUG = 1
yapabilirsiniz
DEBUG = 1 : VERSION2 = 1
:
) ile bunların her birini ayıran bu iletişim birden fazla sabit tanımlayabilir
olan herhangi sabit değil Cody koşullu derleme sana söyledi 0.
olarak kabul edildiği maddedir unutmayın. IDE'de hata ayıklama yaparken farklı davranışlar istiyorsanız (ör. IDE'nin hataları yakalaması için kendi hata işleminizi kapatırsanız) 'un koşullu derlemesine gereksinim duymadığını eklemek isterim. IDE'yi bu gibi çalışma zamanında tespit edebilirsiniz.
On Error Resume Next
Debug.Print 1/0
If Err=0 then
'Compiled Binary
Else
'in the IDE
End if
Bu, Debug.Print'in derlenmiş EXE dosyasında kullanılmadığı için çalışır.
Bu güzel bir ipucu, ama muhtemelen bir noktada 'Hata Özgeçmişinde Yanında' kapatmak isteyebilirsiniz, ha? :-) –
Neden? Hata Özgeçmişinde Sonraki en iyi hata işleme stratejisidir - kullanıcı bu şekilde bir hata görmüyor :) Eh, en azından gerçek verilere bakmıyorsa ... Daha ciddi olarak, sadece global değişken kullanıyoruz (inEXE) ve program başlarken başlatılıyor; hata ayıklama ve izleme bayrakları için aynıdır. Evet, bu yaklaşım önişlemci yönergelerini kullanmaz, ancak çalışma zamanı ek yükü (çeşitli bayrakları kontrol etmekten) veritabanı erişimi veya basit kullanıcı arayüzü çizimi ile karşılaştırıldığında önemsizdir. – Arvo
Küresel bir bayrak ilan etmeniz ve bu kontrolü Sub Main'ın başına doğru bir yerde yapmak daha iyi olur. Bu şekilde, minimum yük ile hata ayıklamasını kontrol edebilirsiniz. –
MarkJ aynı etkiyi elde etmek için, ama hata işleme, aşağıdaki kodu kullanabilirsiniz.IDE içinde çalışan
Public Function GetRunningInIDE() As Boolean
Dim x As Long
Debug.Assert Not TestIDE(x)
GetRunningInIDE = x = 1
End Function
Private Function TestIDE(x As Long) As Boolean
x = 1
End Function
, (gülünç küçük) bir işlevi çağıran ekstra havai olacaktır. Derlendiğinde, bu basit bir sayı karşılaştırması için değerlendirir.
+1 bir kez gerçekleştirildiğinden emin olmak için yerel bir statik kullanmaktır. Bu aslında aslında işte kullandığımız gibi görünüyor, ama bu kodu yayınlamadım çünkü işverenime ait. – MarkJ
Bu benim kısa ve tutarlı kodum. Şartlı sabitlerden daha iyi olduğunu düşünüyorum çünkü her komplikasyon süresini değiştirmenize gerek yok.
Public Function InIDE() As Boolean
On Error Resume Next
Debug.Print 0/0
InIDE = Err.Number <> 0
End Function
+1 En iyi cevap, kısa ve tatlı olduğu ve yeniden derlemeniz gerektiğinde proje özelliklerini değiştirmeyi gerektirmediği için. – Keith
Bu sana DEBUG = 0 ayarlamanız gerekir veya VB oto bu tespit ediyor varsayıyorum exe sürümünü derlemek zaman, fantastik, sadece bir soru bakar ve bir şekilde hata ayıklama şeyler sağlamak için yönetir derlenmemiştir (const toplamasının dahili olarak derleyiciye kodlanması gerekirdi, çünkü bunu yapabilmek mümkün değildi, ama sadece emin olmak istedim). Bu yüzden serbest bırakmadan önce sadece DEBUG = 0 ve derlemeye hazır mısınız? –
@Erx: Hayır, derleyici tarafından yapılan otomatik algılama yok. 'DEBUG' sembolü otomatik olarak tanımlanmaz, bunu kendiniz yapmanız gerekir. Yani "serbest bırakma" moduna geçmek manuel bir işlemdir. Evet, bu örnekte, derleme zamanı 'DEBUG' sabitini 0 –
olarak değiştirecekseniz, DEBUG = 1 kodunu genel açıklama modülünüzün alanına koyarsanız ne olur? Hala çalışır mı, başarısız mı? –