1372826956:AAFe2Py65GSQkfGiRnXuOQ-eD9yXcwMv988

Hata Ayıklama

Hiç nesne çıtçıtlarınızın “object  snaps” gizemli bir şekilde temizlendiğini keşfetmek için bir program mı kullandınız? Veya AutoCAD’in nesne çıtçıtlarının “object  snaps” aniden farklı davrandığı oldu mu? Bunlar, uygun bir hata işleyici ile donatılmamış bir programı iptal ettiğinizi göstermek için, kullanılan işaretlerdir.

Bu makalemde sizlere kodunuzdaki bir şey yanlış gittiğinde, programlarınızın hata ayıklama işlemiyle başa çıkacakları bir hata işleyicisinin nasıl oluşturulacağını öğreteceğim.

Programınızda Ne yanlış gidebilir?

Hatalar “Error” birçok formda ortaya çıkabilir: Bunlar boş bir kullanıcı girdisinden sıfıra bölmeye çalışmaktan kaynaklanıyor olabileceği gibi; çoğu kullanıcının farkında olmadığı şey ise, program çalışırken Esc tuşuna basmak da bir hata olarak kabul edilir ve dolayısıyla anında programın durdurulmasına sebep olur. Bu genellikle kullanıcıların ayarlarını kendilerinin el ile sıfırladıkları duruma yol açar. Burası bir hata işleyicisinin kullanılması için en uygun yerdir.

*error* Fonksiyonu

* Error * fonksiyonu, AutoLISP ifadesini çalıştırırken AutoCAD’in bir hata ile karşılaştığında değerlendirilecek kullanıcı tanımlı bir fonksiyondur.

* Error * fonksiyonu, program değerlendirmesi sırasında bir hata ile karşılaşıldığında AutoCAD tarafından sağlanan tek bir dizge “string” bağımsız değişkenini alır. Bu dizge “string”, * error * fonksiyonunun işleme alınmasına neden olan hatayı açıklar.

AutoCAD tarafından kullanılan standart hata işleyici, komut satırına bu argümanı yazdıracaktır. Komut satırına aşağıdaki ifadeyi yazarak bu davranışı direkt görebilirsiniz:

(itoa nil)

Bu ifade, standart hata işleyicisinin, aşağıdaki iletiyi komut satırında değerlendirmesini ve yazdırmasını sağlar:

;hata: yanlış argüman tipi: “;error: bad argument type:” fixnump: nil

Bir tamsayı bekleyen itoa fonksiyonuna boş “nil” değerinin geçtiğini gösteren fixnump iletisi ile gösterilir.

Bir Hata İşleyicisi Oluşturma

Bir hata işleyicisinin temel amacı, bir programdaki bir şey yanlış giderse kullanıcının AutoCAD ortamını orijinal ayarlarına geri döndürmektir. Bunu başarmak için, * error * fonksiyonunu yeniden tanımlayabiliriz.

(defun c:test ( / *error* )

      (defun *error* ( msg )

        (princ “Hata: “)

        (princ msg)

        (princ)

   )

     (getstring “\nHatayı geçmek için Esc tuşuna basın…”)

    (princ)

)

Komut satırında komut testini kullanarak yukarıdaki programı çalıştırırken, veri istemi (uyarı) geldiğinde, Esc tuşuna basarak program durdurulacak ve hata işleyici işleme alınacaktır.

Yukarıdaki * error * fonksiyonunun tek bir bağımsız değişkeni kullandığına dikkat edin: * error * fonksiyonunu değerlendirildiğinde, oluşmuş hatayı açıklayan bir dizge iletilir; yukarıdaki fonksiyon daha sonra bu iletiyi komut satırına yazdırmaya devam eder. Bu özel fonksiyon standart AutoCAD hata işleyiciyi tetikler.

* error * simgesinin yerel bir fonksiyon olarak (yerelleştirilmiş olarak) bildirildiğini unutmayın – bu, ön tanımlı ayar AutoCAD hata işleyicisinin programın tamamlanmasını müteakip geri yüklenmesini sağlar.

Daha Profesyonel Bir Hata İşleyicisi …

Bu noktada, veri isteminde (uyarıda) Esc tuşuna basmanızın üzerine, hata işleyicisinin yukarıdakine benzer bir mesaj yazdıracağını fark etmiş olmalısınız:

hata: Fonksiyon iptal edildi. 

Tabii ki, birçok kullanıcı düzenli olarak bir programdan çıkmak için Esc tuşuna basacak, bu nedenle program geliştiricisi standart AutoCAD komutlarının davranışını daha iyi taklit etmek için, bu hata mesajını bastırmak isteyecektir.

Ancak, aynı zamanda, kullanıcının denetiminin dışında bir hata oluştuğunda, komut satırına başka kritik hata iletileri de yazdırmak isteriz.

Bunu yapmak için, * error * fonksiyonunu aşağıdaki şekilde tanımlayabiliriz:

 

(defun c:test ( / *error* )

      (defun *error* ( msg )

        (if (not (member msg ‘(“Function iptal edildi” “bitir / çıkış durdur”)))

            (princ (strcat “\nHata:” msg))

        )        (princ)

    )

     (rtos (getreal “\nÇıkmak için Esc tuşuna basın. Devam etmek için Enter tuşuna basın…”))

    (princ)

)

Yukarıdaki if ifadesi basitçe şöyle demektedir:

Şayet  Fonksiyon iptal edildi bitir/ çıkış durdur değilse, mesajı yazdır.

Şimdi, yukarıdaki kodu test ettikten sonra kullanıcı istemde Esc tuşuna basarsa, hata işleyici bir hata mesajı yazdırmaz; Ancak, kullanıcı Enter tuşuna basarsa, rtos fonksiyonu bir bağımsız boş “nil“ değişkeni ile sağlanır ve hata işleyici ilgili hata mesajını yazdıracaktır.

Kullanıcı Ortamını Sıfırlama

Bazen programlar, belirli sonuçlar elde etmek için yürütme sırasında sistem değişkenlerini değiştirirler. Bununla birlikte, kullanıcı, bir sistem değişkeni değiştirildikten ve henüz sıfırlanmadan sonra bir noktada Esc tuşuna basarsa, uygun bir hata işleyici kullanılmadan sistem değişkeni orijinal değerine geri getirilmez.

Aşağıdaki örnekte gösterildiği gibi, kullanıcı tarafından tanımlanan bir hata işleyicisi kullanılarak program tarafından değiştirilen ayarları sıfırlayabiliriz:

(defun c:test ( / *error* osm )

      (defun *error* ( msg )

        (if osm (setvar ‘osmode osm))

        (if (not (member msg ‘(“Fonksiyon iptal edildi” “bitir / çıkış durdur”)))

            (princ (strcat “\nHata:” msg))

        )

        (princ)

    )

     (setq osm (getvarosmode))

    (setvarosmode 0)     (rtos (getreal “\nÇıkmak için Esc tuşuna basın. Devam etmek için Enter tuşuna basın…”))

(setvar osmode osm)

    (princ)

)

Yukarıdaki kod önce sistem değişkenini 0 olarak ayarlamadan önce OSMODE sistem değişkeninin geçerli ayarını yerel bir değişkene (osm) atayacaktır. Program daha sonra veri isteminin (uyarının) ardından orijinal ayarı geri yükleyecektir.

Kullanıcı, istemde Esc (veya Enter) tuşuna basarsa, yerel olarak tanımlanan * error * fonksiyonu işleme alınır.

Hata işleyicisi, osm yerel değişkenini boş “nil” olmayan bir değer için denetler ve şayet OSMODE sistem değişkeninin özgün ayarı kullanılabilirse, sistem değişkeni bu değere sıfırlanır.

Hakkında Sertan Türkan

AutoCAD Beyni

Bunu da Kontrol edin

Revitte Referans Kesit Oluşturma

Revit’te mevcut bir görünüşe başvuran kesitleri yerleştirebilirsiniz. Referans kesitlerini plan, cephe, kesit, detay ve açıklama …

Bir cevap yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Yardıma mı ihtiyacınız var? Chat with us
Bir görüşme başlatmak için lütfen önce gizlilik politikamızı kabul edin.