2012-01-29 29 views

cevap

32

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.

  1. 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 
    
  2. : 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 
    
: iki nokta üst üste ( :) 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.

+0

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? –

+1

@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 –

+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ı? –

11

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.

  • DÜZENLEME On Error Resume Next kapatmayı unutmayın! Sen this (teşekkürler CraigJ) gibi bir fonksiyonu check sarabilirsiniz
  • DÜZENLEME
+1

Bu güzel bir ipucu, ama muhtemelen bir noktada 'Hata Özgeçmişinde Yanında' kapatmak isteyebilirsiniz, ha? :-) –

+1

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

+0

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. –

6

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.

+0

+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

2

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 
+0

+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