2011-10-27 13 views
35

Diğer sorulara benzer şekilde, like this one.javascript hata ayıklama: Değişken değerin değişmesini engellemenin bir yolu var mı?

Herhangi bir javascript hata ayıklayıcıda değişken bir değerin değişmesini engellemenin bir yolu var mı? (IE Geliştirici araçları, Visual Studio ya da Firebug gibi)

Sanırım bir "izleme değişkeni" gibi bir şey, ama değişkenin değişmesi gerçekleştiğinde çağrıları görebilmek ve duraklatmak istiyorum.

Alternatif bir ayar, özel bir ayarlayıcı ile değer ayarını geçersiz kılmak ve buna bir kesme noktası koymak olabilir, ancak maalesef IE afaik için çalışmaz.

GÜNCELLEME davranış bu tip en az written in C++ Yani C++ (Google'ın V8) yazılmış bir javascript motoru benzer bir şey olabilir diye düşündüm yönetilmeyen kod için kullanılabilir olduğunu görünür, ancak buna sahip görünmüyor Ben de ne isterim.

+0

İş parçacığını tamamen kırmanın basit bir yolu, bir uyarı koymaktır, onun can sıkıcı evet ama istediğiniz şeyi, değişkeninizi, bir dizeyi, gerçekten ne olursa olsun, uyarırsınız. Ve eğer ateş böceği gibi bir şey kullanırsanız ve kodunuzda oturum açarsanız, o zaman programınız boyunca uyarılar ile kolayca ilerleyebilirsiniz. – Ryan

+4

Şey, değişkenin nerede değiştiğini bilmiyorum. Başka bir dosyada (veya birkaç tane) olabilir. Nerede değiştiğini bulmak için kodumu uyarı ifadeleriyle çöplüğe sokmayacağım. Bu noktada kod satırındaki hata ayıklayıcısına göre adım adım ilerleyebilirim. Yine de teşekkürler. – user420667

cevap

16

Hatta bir IDE gerek yoktur - siz "Object.watch()" kullanabilirsiniz: Eğer herhangi bir hata ayıklayıcı kullanırsanız

Object.Watch Tutorial

, şiddetle Firebug öneriyoruz. Chrome'da bu kütüphane ile

http://getfirebug.com/javascript

+4

+1 b/c Bunun işe yarayacağını hayal ediyorum. Ancak, pek çok tarayıcı atm ile uyumlu olduğunu sanmıyorum, b/c standart olmayan javascript 1.8.6: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/watch – user420667

+0

Haven ' Bunu denemeyi başardı, ancak yukarıdaki bağlantı, setter/getter yöntemlerini kullanmayı belirttiği için daha iyi bir yaklaşım olabilir: https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects#Defining_getters_and_setters – GuruM

+8

2013 yılında hala Firefox veya Chrome'da desteklenmeyen Object.watch() ... –

9

yaşıyorum başarı ve tüm büyük tarayıcıları desteklediğini görünür: Tüm JavaScript, HTML ve CSS için :-) ihtiyacı var.

https://gist.github.com/eligrey/384583

Sadece .js dosyasını içerir, daha sonra çağrı: Sorunuzu yanlış ise

yourObject.watch('someProperty', function() { 
    doWhatYouWant(); 
    debugger; 
    console.write('this too'); 
    alert('Object Changed'); //etc 
}); 
+0

bu iyi görünüyor. ayrıca http://stackoverflow.com/a/1848414/420667. Teşekkürler. – user420667

+0

Chrome'u kullanarak benim için çalışmadım. İlk önce Gist JavaScript'i çalıştırdım. Ardından 'watch (myObject,' propertyName ', function() {console.log (' değiştirildi! ');}); Özellik değeri değişmesine rağmen, konsol.log iletisi hiç gelmedi. – Joncom

+0

Watch() öğesini çağırdığınızda konsolda bir hata olup olmadığını kontrol edin. Kütüphane kesinlikle çalışır, bu yüzden ya yükleme yapılmadığını ya da aramanızın başarılı olmadığını tahmin ederim. – rainabba

-2

Bilmiyorum. Bir ifade izlemek ve Chrome Geliştirici Araçları'nda bir js hata ayıklama oturumu sırasında belirli bir değere ulaştığında durmak istiyorsanız, oldukça önemsizdir.

Sadece kontrol etmek istediğiniz değerin olduğu satırda bir kesme noktası koyabilirsiniz, sonra üzerine sağ fare tuşuyla tıklayın ve "Kesme noktasını düzenle ..." yi seçin. Bir ifade için bir iletişim kutusu açılır ve burada değer, değeri doğru olduğunda duracaktır.

n = i++;: Mesela

, Diyelim ki bir döngü var ve bunun içinde bir değişkene bir birim ekliyoruz ve değişken döngü içinde ifade şu şekilde görünecektir 3'e eşit olduğunda yürütülmesini durdurmak istiyor diyelim

Kesme noktanızı bu hatta ve izlenecek ifadeyi ("Kesme noktasını düzenle ..." ile istendikten sonra) n == 3 olacaktır. Kodunuz çalışırken değişkeniniz o değere ulaştığında orada duracaktır.

Duruşunuzun mavi yerine turuncuya dönüştüğü için durumunuzun ayarlandığını fark edersiniz.

+1

Bitişik bir satırda n = i ++ (yani şimdi iki kez artırılmış bir döngünüz var) ve bitişik çizgide kesme noktasını koymadıysanız, bitişik hatta 3 döndüğünde durur mu? Eğer değilse, bu aradığım şeyi yapmazdı. Alternatif olarak, n bir nesnenin bir özelliğiyse ve pek çok yerde ayarlanabilseydi, saati n bir dizinin üzerine koyarak tüm dosyalarda n'nin tüm ayarlarını kapsayacak kadar yeterli olur mu? – user420667

+0

Bu kesin denemeyi denemedim ama bilgim için evet diyeyim, "Kesme noktasını düzenle ..." iletişim kutusunda değerlendirilecek ifadenin, kesme noktasının olduğu satırdaki kodla aynı olması gerekmez. yer almak. Ne "var eşit değer" olması gerekmez; Örneğin, i + j <= k * n' gibi bir şey koyabilirsiniz. İfadeyi devre dışı bırakmak için bile yorum yapabilirsiniz. Kodunuzun içinde 'n (= 3) {dummy = true}' ifadesini koymak ve kırılma noktanızı 'kukla' satırına yerleştirmekle aynı zamanda breakpoint diyaloglarının "limbo" unda tutmakla aynı şekilde çalışır. Onaylamak için kendiniz deneyin;) – Pere

+0

İfadenin yalnızca kesme noktası vurulduğunda değerlendirildiğini düşünüyorum. Bu nedenle, n = i ++ 'nin iki satırındaki örnekte, yalnızca bir tanesinde bir kesme noktasıyla, n == 3'ün kesme noktanız, noktayı koyduğunuz satıra ve i' in ilk değerine bağlı olarak vurulmayabilir. – user420667

İlgili konular