Hata ayıklama mesajlarını Google Chrome JavaScript Konsolunda nasıl yazdırabilirim?


466

Hata ayıklama mesajlarını Google Chrome JavaScript Konsolunda nasıl yazdırabilirim?

Lütfen JavaScript Konsolunun JavaScript Hata Ayıklayıcı ile aynı olmadığını unutmayın; AFAIK sözdizimleri farklıdır, bu nedenle JavaScript Hata Ayıklayıcı'daki print komutu burada çalışmaz. JavaScript Konsolu'nda, print()parametreyi yazıcıya gönderir.

Yanıtlar:


597

Tarayıcı adres çubuğundan aşağıdaki kodu yürütme:

javascript: console.log (2);

Google Chrome'daki "JavaScript Konsolu" na başarıyla mesaj yazdırır.


13
Sadece fark, console.log()js hata ayıklama için harika ... Sık sık pratikte kullanmayı unutuyorum.
Ish

Bu "çıktılardan" biri ne kadar olabilir? Bu arada oy verin, bu gerçekten yardımcı oldu
nbura

3
@dbrin bu geliştirme için uygundur, ancak console.log()dağıtımdan önce tüm kodlar üretim kodundan kaldırılmalıdır.
Samuel MacLachlan

2
@Sebas Console.Logdağıtımdan önce üretim kodundan çıkarılmalıdır, aksi takdirde bu mesajlar kullanıcılarınızın JavaScript konsoluna kaydedilecektir. Görme olasılığı düşük olsa da, cihazlarında bellek alanı kaplıyor. Ayrıca, Günlüğün içeriğine bağlı olarak, potansiyel olarak kullanıcılara uygulamanızı nasıl hackleyeceğini / tersine mühendislik yapılacağını söylersiniz.
Samuel MacLachlan

166

Andru'nun fikrini iyileştirerek, yoksa konsol işlevleri oluşturan bir komut dosyası yazabilirsiniz:

if (!window.console) console = {};
console.log = console.log || function(){};
console.warn = console.warn || function(){};
console.error = console.error || function(){};
console.info = console.info || function(){};

Ardından, aşağıdakilerden herhangi birini kullanın:

console.log(...);
console.error(...);
console.info(...);
console.warn(...);

Bu işlevler farklı türde öğeleri günlüğe kaydeder (günlük, bilgi, hata veya uyarıya göre filtrelenebilir) ve konsol mevcut olmadığında hatalara neden olmaz. Bu işlevler Firebug ve Chrome konsollarında çalışır.


Bunun için teşekkürler. Bir kez "if" komutunu çalıştırırsanız if (!window.console) {ve her şeyi parantez içine alırsanız kod daha sıkı olmaz mı? Şu anda aynı şeyleri dört kez değerlendiriyorsunuz.
Dan Rosenstark

Hayır, b / c sadece window.console'a sahip olmak bir window.console.log veya .warn & c'ye sahip olacağınızı garanti etmez
Paul

18
Bu komut dosyası sayfaya yüklenmişse ve konsol penceresi açık değilse , sayfa yüklendikten sonra konsolu açarsanız gerçek konsolun çalışmasını engelleyebilecek 'kukla' konsol oluşturacaktır . (en azından bu, Firefox / Firebug ve Chrome'un eski sürümlerinde geçerlidir)
CWD

1
Buna eklemelerim var, aşağıdaki cevabımı gör
Tim Büthe

1
Hayır, bu bir TypeError ile krom iptali yapmaz . Yukarıda bağlantılı soru ile çağırarak hakkındadır bu . Yukarıdaki kod bunu yapmaz ve Chrome'da iyi çalışır
gman

47

Sadece birçok geliştiricinin kaçırdığı harika bir özellik ekleyin:

console.log("this is %o, event is %o, host is %s", this, e, location.host);

Bu, bir JavaScript nesnesinin sihirli %odöküm tıklanabilir ve derin göz atılabilir içeriğidir. %ssadece kayıt için gösterildi.

Ayrıca bu da harika:

console.log("%s", new Error().stack);

Bu, new Error()çağrının bulunduğu noktaya Java benzeri bir yığın izlemesi verir ( dosya yolu ve satır numarası dahil !).

Hem %ove new Error().stackChrome ve Firefox'ta mevcuttur!

Ayrıca Firefox'taki yığın izleri için:

console.trace();

Gibi https://developer.mozilla.org/en-US/docs/Web/API/console söylüyor.

Mutlu hack!

GÜNCELLEME : Bazı kütüphaneler, consolenesneyi kendi amaçları için yeniden tanımlayan kötü insanlar tarafından yazılmıştır . consoleKitaplığı yükledikten sonra orijinal tarayıcıyı geri yüklemek için şunu kullanın:

delete console.log;
delete console.warn;
....

Bkz. Yığın Taşması sorusu Geri yükleme console.log () .


3
Az önce keşfettiğim bir diğer: console.dir developer.mozilla.org/en-US/docs/Web/API/console.dir
dbrin

17

Sadece hızlı bir uyarı - Internet Explorer'da tüm console.log () 'ları kaldırmadan test etmek istiyorsanız, Firebug Lite kullanmanız veya özellikle kolay olmayan bazı hatalar almanız gerekir.

(Veya yalnızca false döndüren kendi console.log () dosyanızı oluşturun.)


2
Böyle çapraz tarayıcı hatalarından kaçınırım: if (console) console.log ()
Craig Wohlfeil

IE'de geliştirici araçlarını açarsanız (F12), consolenesne oluşturulur ve siz o tarayıcı örneğini kapatana kadar var olur.
Tim Büthe

17

Konsolun kullanılabilir olup olmadığını kontrol eden kısa bir komut dosyası. Değilse, Firebug'u yüklemeye çalışır ve Firebug mevcut değilse Firebug Lite'ı yükler. Artık console.logherhangi bir tarayıcıda kullanabilirsiniz . Zevk almak!

if (!window['console']) {

    // Enable console
    if (window['loadFirebugConsole']) {
        window.loadFirebugConsole();
    }
    else {
        // No console, use Firebug Lite
        var firebugLite = function(F, i, r, e, b, u, g, L, I, T, E) {
            if (F.getElementById(b))
                return;
            E = F[i+'NS']&&F.documentElement.namespaceURI;
            E = E ? F[i + 'NS'](E, 'script') : F[i]('script');
            E[r]('id', b);
            E[r]('src', I + g + T);
            E[r](b, u);
            (F[e]('head')[0] || F[e]('body')[0]).appendChild(E);
            E = new Image;
            E[r]('src', I + L);
        };
        firebugLite(
            document, 'createElement', 'setAttribute', 'getElementsByTagName',
            'FirebugLite', '4', 'firebug-lite.js',
            'releases/lite/latest/skin/xp/sprite.png',
            'https://getfirebug.com/', '#startOpened');
    }
}
else {
    // Console is already available, no action needed.
}

14

Delan Azabani'nin cevabına ek olarak , paylaşmak istiyorum console.jsve aynı amaçla kullanıyorum. İşlev adlarının bir dizisini kullanarak bir noop konsolu oluşturuyorum, bence bunu yapmak için çok uygun bir yol ve bir console.logişlevi olan Internet Explorer'a baktım , ancak hayır console.debug:

// Create a noop console object if the browser doesn't provide one...
if (!window.console){
  window.console = {};
}

// Internet Explorer has a console that has a 'log' function, but no 'debug'. To make console.debug work in Internet Explorer,
// We just map the function (extend for info, etc. if needed)
else {
  if (!window.console.debug && typeof window.console.log !== 'undefined') {
    window.console.debug = window.console.log;
  }
}

// ... and create all functions we expect the console to have (taken from Firebug).
var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
    "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];

for (var i = 0; i < names.length; ++i){
  if(!window.console[names[i]]){
    window.console[names[i]] = function() {};
  }
}

12

Veya bu işlevi kullanın:

function log(message){
    if (typeof console == "object") {
        console.log(message);
    }
}

console.constructor === Object && (log = m => console.log(m))
Josh Habdas

7

İşte konsol sarmalayıcı sınıfım. Hayatı kolaylaştırmak için bana kapsam çıktısı sağlıyor. Yöntemine erişim sağlayan, çağıran sınıfın kapsamında çalışacak şekilde kullanımına localConsole.debug.call()dikkat localConsole.debugedin toString.

localConsole = {

    info: function(caller, msg, args) {
        if ( window.console && window.console.info ) {
            var params = [(this.className) ? this.className : this.toString() + '.' + caller + '(), ' + msg];
            if (args) {
                params = params.concat(args);
            }
            console.info.apply(console, params);
        }
    },

    debug: function(caller, msg, args) {
        if ( window.console && window.console.debug ) {
            var params = [(this.className) ? this.className : this.toString() + '.' + caller + '(), ' + msg];
            if (args) {
                params = params.concat(args);
            }
            console.debug.apply(console, params);
        }
    }
};

someClass = {

    toString: function(){
        return 'In scope of someClass';
    },

    someFunc: function() {

        myObj = {
            dr: 'zeus',
            cat: 'hat'
        };

        localConsole.debug.call(this, 'someFunc', 'myObj: ', myObj);
    }
};

someClass.someFunc();

Bu Firebug'da olduğu gibi çıktı verir :

In scope of someClass.someFunc(), myObj: Object { dr="zeus", more...}

Veya Chrome:

In scope of someClass.someFunc(), obj:
Object
cat: "hat"
dr: "zeus"
__proto__: Object

6

Şahsen ben tarek11011 benzer bu kullanın:

// Use a less-common namespace than just 'log'
function myLog(msg)
{
    // Attempt to send a message to the console
    try
    {
        console.log(msg);
    }
    // Fail gracefully if it does not exist
    catch(e){}
}

Ana nokta, en azından console.log()doğrudan JavaScript kodunuza yapışmaktan başka bazı oturum açma pratiğine sahip olmanın iyi bir fikir olmasıdır , çünkü unutursanız ve bir üretim sitesinde ise, tüm JavaScript kodunu kırabilir o sayfa için.


neden olmasın if(windows.console) console.log(msg)?
CJStuart

window.consoleDiyorsun ki. denemenin yararlı olacağı tek zaman, konsol yeniden tanımlandığı için bir Hata atıldıysa (console.log bir işlev değilse). Yapmak window.console && window.console.log instanceof Functiondaha yararlı olur.
Aram Kocharyan

4

console.log()Hangi programlama yazılımı düzenleyicisine sahip bir hata ayıklama kodunuz varsa kullanabilirsiniz ve çıktı muhtemelen benim için en iyi düzenleyicidir (Google Chrome). Sadece tuşuna F12basın ve Konsol sekmesine basın. Sonucu göreceksiniz. Mutlu kodlama. :)


4

Konsollarında kontrol eden geliştiricilerle ilgili birçok sorun yaşadım. () İfadeleri. Ve Internet Explorer 10 ve Visual Studio 2012'deki fantastik iyileştirmelere rağmen, Internet Explorer'da hata ayıklamayı gerçekten sevmiyorum gibi .

Bu yüzden, konsol nesnesinin kendisini geçersiz kıldım ... Yalnızca localhost üzerinde konsol deyimlerine izin veren bir __localhost bayrağı ekledim. Internet Explorer'a konsol (.) İşlevlerini de ekledim (bunun yerine bir uyarı () görüntüler).

// Console extensions...
(function() {
    var __localhost = (document.location.host === "localhost"),
        __allow_examine = true;

    if (!console) {
        console = {};
    }

    console.__log = console.log;
    console.log = function() {
        if (__localhost) {
            if (typeof console !== "undefined" && typeof console.__log === "function") {
                console.__log(arguments);
            } else {
                var i, msg = "";
                for (i = 0; i < arguments.length; ++i) {
                    msg += arguments[i] + "\r\n";
                }
                alert(msg);
            }
        }
    };

    console.__info = console.info;
    console.info = function() {
        if (__localhost) {
            if (typeof console !== "undefined" && typeof console.__info === "function") {
                console.__info(arguments);
            } else {
                var i, msg = "";
                for (i = 0; i < arguments.length; ++i) {
                    msg += arguments[i] + "\r\n";
                }
                alert(msg);
            }
        }
    };

    console.__warn = console.warn;
    console.warn = function() {
        if (__localhost) {
            if (typeof console !== "undefined" && typeof console.__warn === "function") {
                console.__warn(arguments);
            } else {
                var i, msg = "";
                for (i = 0; i < arguments.length; ++i) {
                    msg += arguments[i] + "\r\n";
                }
                alert(msg);
            }
        }
    };

    console.__error = console.error;
    console.error = function() {
        if (__localhost) {
            if (typeof console !== "undefined" && typeof console.__error === "function") {
                console.__error(arguments);
            } else {
                var i, msg = "";
                for (i = 0; i < arguments.length; ++i) {
                    msg += arguments[i] + "\r\n";
                }
                alert(msg);
            }
        }
    };

    console.__group = console.group;
    console.group = function() {
        if (__localhost) {
            if (typeof console !== "undefined" && typeof console.__group === "function") {
                console.__group(arguments);
            } else {
                var i, msg = "";
                for (i = 0; i < arguments.length; ++i) {
                    msg += arguments[i] + "\r\n";
                }
                alert("group:\r\n" + msg + "{");
            }
        }
    };

    console.__groupEnd = console.groupEnd;
    console.groupEnd = function() {
        if (__localhost) {
            if (typeof console !== "undefined" && typeof console.__groupEnd === "function") {
                console.__groupEnd(arguments);
            } else {
                var i, msg = "";
                for (i = 0; i < arguments.length; ++i) {
                    msg += arguments[i] + "\r\n";
                }
                alert(msg + "\r\n}");
            }
        }
    };

    /// <summary>
    /// Clever way to leave hundreds of debug output messages in the code,
    /// but not see _everything_ when you only want to see _some_ of the
    /// debugging messages.
    /// </summary>
    /// <remarks>
    /// To enable __examine_() statements for sections/groups of code, type the
    /// following in your browser's console:
    ///       top.__examine_ABC = true;
    /// This will enable only the console.examine("ABC", ... ) statements
    /// in the code.
    /// </remarks>
    console.examine = function() {
        if (!__allow_examine) {
            return;
        }
        if (arguments.length > 0) {
            var obj = top["__examine_" + arguments[0]];
            if (obj && obj === true) {
                console.log(arguments.splice(0, 1));
            }
        }
    };
})();

Örnek kullanım:

    console.log("hello");

Krom / Firefox:

    prints hello in the console window.

Internet Explorer:

    displays an alert with 'hello'.

Koda yakından bakanlar için console.examine () işlevini keşfedeceksiniz. KG / müşteri sorunlarını gidermeye yardımcı olması için ürünün çevresindeki belirli alanlarda hata ayıklama kodu bırakabilmem için bu yıllar önce oluşturdum . Örneğin, bazı yayınlanmış kodda aşağıdaki satırı bırakacaktı:

    function doSomething(arg1) {
        // ...
        console.examine("someLabel", arg1);
        // ...
    }

Ardından, piyasaya sürülen üründen konsola (veya 'javascript:' ile başlayan adres çubuğuna) aşağıdakileri yazın:

    top.__examine_someLabel = true;

Sonra, kaydedilen console.examine () deyimlerinin tümünü göreceğim. Birçok kez fantastik bir yardımcı oldu.


Bu harika fikir için teşekkürler. Oldukça ilham vericiydi. Senin inceleme fonksiyonundan, farkında olmadan php hata ayıklama için kapsam fikrine devam etti. mydebug_on ('somescope'), mydebug ('somescope', $ data) vb. Şimdi php kodu için konu seçici hata ayıklama ve günlük kaydını açabilir / kapatabilirim. Ve normal linux programları gibi, standart bir düzenli ayrıntılı vb lezzet giriş yapabilirsiniz. Gerçekten de güzel bir fikir!
Johan

3

Diğer tarayıcılar için satır numaralandırmasını koruyan basit Internet Explorer 7 ve altı dolgu :

/* Console shim */
(function () {
    var f = function () {};
    if (!window.console) {
        window.console = {
            log:f, info:f, warn:f, debug:f, error:f
        };
    }
}());

2
console.debug("");

Bu yöntemi kullanmak, metni konsoldaki parlak mavi renkte yazdırır.

resim açıklamasını buraya girin


1

Delan ve Andru'nun fikirlerini daha da geliştirmek (bu yüzden bu cevap düzenlenmiş bir versiyondur); console.log büyük olasılıkla diğer işlevler olmayabilir, bu yüzden varsayılan eşlemi console.log ile aynı işleve sahip ....

Varsa, konsol işlevleri oluşturan bir komut dosyası yazabilirsiniz:

if (!window.console) console = {};
console.log = console.log || function(){};
console.warn = console.warn || console.log;  // defaults to log
console.error = console.error || console.log; // defaults to log
console.info = console.info || console.log; // defaults to log

Ardından, aşağıdakilerden herhangi birini kullanın:

console.log(...);
console.error(...);
console.info(...);
console.warn(...);

Bu işlevler farklı türde öğeleri günlüğe kaydeder (günlük, bilgi, hata veya uyarıya göre filtrelenebilir) ve konsol mevcut olmadığında hatalara neden olmaz. Bu işlevler Firebug ve Chrome konsollarında çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.