2013-04-25 25 views
6

Sadece Lua ile biraz oynadım ve oldukça hoş olan Koneki eclipse eklentisini denedim. Sorun şu ki, ben bir hatada değişiklik yapıyorum bir değişiklik olduğunda değişiklikler kaydedilirken değişikliklerin etkili olmaz. Bu yüzden uygulamayı yeniden başlatmaya zorlandım. Hata ayıklayıcısında değişiklikler yapabilsem çok iyi olurlar ve örneğin Smalltalk ile olduğu gibi, ya da Java'da hot code yedeklemesinde olduğu gibi bazılarında da etkili olurlar. Bunun mümkün olup olmadığı konusunda bir ipucu var mı?Lua'da "hata ayıklayıcıda" kod yazmanın yolu nedir?

cevap

5

Bazı sınırlamalarla bir dereceye kadar mümkündür. Bu işlevi sağlayan bir IDE/debugger geliştiriyorum. Çalışan uygulamanızın bağlamında/ortamında komutları yürütmek için uzak bir konsola erişmenizi sağlar. IDE, değiştirdiğiniz kodu değiştirdiğinizde yeniden yükleyen live coding'u da destekler; bkz. demolar here.

Ana sınırlama şu anda çalışan bir işlevi değiştiremezsiniz (en azından Lua VM'de değişiklik olmadan). Bu, değişikliklerin şu anda çalışan işlevdeki etkisinin yalnızca siz çıktıktan ve bu işlevi yeniden girdikten sonra göreceğiniz anlamına gelir. Aynı işlevi sürekli olarak çağıran ortamlar için iyi çalışır (örneğin, draw numaralı arama motoru), ancak sizin durumunuzda çalışmayabilir.

Başka bir sorun upvalues ​​(işlevin dışında oluşturulan ve içinde başvurulan değerler) ile uğraşmaktır. Geçerli upvalentleri "okumak" için yöntemler vardır ve (yeni) işlevi oluşturulduğunda yeniden yaratırlar, ancak güncel değerleri elde etmek için, hangi fonksiyonların upvalue'lar için sorgulanacağını bulmak için hangi kod analizini gerektirdiğini ve Bu değer ile yeni bir çevre yaratmak ve bunlara uygun değerler atamak. Mevcut uygulamam bunu yapmıyor, yani global değişkenleri bir geçici çözüm olarak kullanmanız gerekiyor.

Diğer gün, Lua posta listesinde relevant discussion da vardı.

+0

Anlayışlı cevap, Paul. Teşekkürler. – OlliP

+0

Bence bu Smalltalk'ta çalışmanın sebebi, bütün kodun tamamen bellekte (Smalltalk link kütüphaneleri daha sonra Kava'nın olduğu zaman geldi) bir ikili enstantane olduğu (Smalltalk'ta "image" olarak adlandırılır) olmasıdır. Yani, Smalltalk bunu yapabileceğiniz tek dil gibi görünüyor. Çok yazık ... – OlliP

İlgili konular