Jak debugujesz wtyczki?


49

Jestem całkiem nowy w tworzeniu wtyczek i miałem trudności z debugowaniem.

Użyłem dużo echa i jest niechlujny i brzydki.

Jestem pewien, że jest lepszy sposób, aby to zrobić, może IDE z debuggerem, w którym mogę uruchomić całą witrynę, włączając wtyczkę?


1
Nie widziałem IDE, które uruchamiałoby WordPress całkowicie w IDE ... choć byłoby to niesamowite. Debuguję wtyczki, uruchamiając WAMP lokalnie i kodując w Dreamweaver. Jeśli ustawisz wartość WP_DEBUGfalse, zgodnie z zaleceniami Johna, masz całkiem dobre pojęcie o tym, co dzieje się źle, jeśli w ogóle, w twoich skryptach. Następnie możesz edytować w programie Dreamweaver, nacisnąć Ctrl + S, a następnie F5 w przeglądarce, aby natychmiast wyświetlić zmiany.
EAMann

1
@EAMann - koniecznie sprawdź zarówno PhpEd (dla Windows), jak i PhpStorm + XDEBUG (dla Mac, Linux i Windows).
MikeSchinkel,

Odpowiedzi:


21

Przejdź do wp-config.php i zmień define('WP_DEBUG', false);na define('WP_DEBUG', true);. Zainstaluj także wtyczkę Log Deprecated Notices Andrew Andrew Nacina .


12
Sprawdziłbym też inny artykuł Nacina
kevtrout

W PHP 5.4+ prawdopodobnie będziesz zalany powiadomieniami E_STRICT. Upuść zawartość w folderze wtyczek i aktywuj, aby usunąć Ścisłe powiadomienia, dezaktywuj, aby powrócić do normalnej usługi.
webaware

12

Jeśli otrzymujesz błędy, x-debugowanie to wspaniałe rozszerzenie PHP, które dodaje nowoczesne ślady wstecz do PHP.

Jeśli próbujesz dowiedzieć się, co się dzieje, gdzie nie ma błędów, moim ulubionym podejściem jest zdefiniowanie funkcji, która rejestruje dane wyjściowe w pliku. Więc robię plog (zmienna $) i to pojawia się w pliku dziennika, który mogę następnie zbadać. Jest to szczególnie przydatne, gdy próbujesz dowiedzieć się, co wydarzyło się przed wywołaniem funkcji header () lub w innych sytuacjach, w których nie można drukować do STDOUT.


10

Użyj xdebug + NetBeans IDE. Po pełnej konfiguracji - co jest łatwe do zrobienia - możesz ustawić punkty przerwania we wtyczce i oglądać zmienne w punktach przerwania. Myślę, że to najlepszy sposób na debugowanie wtyczek lub innych aplikacji php w tym zakresie.


6

Debuguję staromodny sposób, error_log()ing i var_dumping. Uważam, że jest to dla mnie najbardziej wydajny sposób, mam kilka funkcji otoki do obsługi różnych typów danych, ponieważ error_logwczytywanie tablic i obiektów może być uciążliwe. Również używanie print_r()in może być trudne do odczytania, gdy nie ma go w <pre>. Mam tj_log()do rejestrowania błędów i tj()do wyświetlania danych wyjściowych (które w zasadzie pokazuje dowolny typ danych w reprezentatywnym mannorze:

function tj( $code ) {

    ?>
    <style>
        .tj_debug { word-wrap: break-word; white-space: pre; text-align: left; position: relative; background-color: rgba(0, 0, 0, 0.8); font-size: 11px; color: #a1a1a1; margin: 10px; padding: 10px; margin: 0 auto; width: 80%; overflow: auto; -moz-box-shadow:0 10px 40px rgba(0, 0, 0, 0.75); -webkit-box-shadow:0 10px 40px rgba(0, 0, 0, 0.75); -moz-border-radius: 5px; -webkit-border-radius: 5px; text-shadow: none; }
    </style>
    <br /><pre class="tj_debug">

    <?php
    if ( is_null( $code ) || is_string($code) || is_int( $code ) || is_bool($code) || is_float( $code ) ) :
        var_dump( $code );

    else :
        print_r( $code );

    endif;

    echo '</pre><br />';

}

function tj_log( $code ) {

    if ( is_null( $code ) || is_string($code) || is_int( $code ) || is_bool($code) || is_float( $code ) ) :
        $code = var_export( $code, true );

    else :
        $code = print_r( $code, true );

    endif;

    error_log( $code );

}

Więc po prostu robię: tj( $current_user );czy cokolwiek.


5

Po majstrowaniu przy wielu IDE, zdecydowałem się na zwykły stary Notepad ++ z ultra dostosowanym schematem kolorów Podświetlanie składni.

Mam skonfigurowane makro, dzięki czemu po naciśnięciu klawisza Shift-Ctrl-X następujący kod jest generowany w miejscu, w którym znajduje się mój kursor:

echo "<pre>";
var_dump($);
echo "</pre>";
exit();

To proste, ale ogólnie mogę wyśledzić 90% moich błędów za pomocą tego makra i włączonej WP_DEBUG.


2
Niezły ruch. Klawisze skrótów w edytorach rocka!
hakre

1
Wolę dane wyjściowe podane przez print_r($var, true)zamiast var_dump.
brasofilo

5

Napisałem małą klasę do tworzenia pliku dziennika, jest bardzo przydatny, gdy debugujesz wywołania ajax.

http://github.com/hunk/Magic-Fields/blob/master/tools/debug.php

Musisz tylko zrobić coś takiego:

Debug :: log („To jest komunikat debugowania”);

Po wykonaniu tej linii wiadomość zostanie dodana do pliku dziennika, a następnie możesz użyć polecenia tail (jeśli używasz systemu operacyjnego w stylu Uniksa)

tail -f mylogfile.log

Jeśli możesz przekazać do tej funkcji również tablicę lub obiekt.

pamiętaj, że musisz zmienić wiersz 20 na ścieżkę, w której chcesz zapisać plik dziennika


3

Używam Aptane IDE w systemie Linux i UltraEdit w systemie Windows, a ten ma również parser PHP. Widzę też wszystkie wskazówki od xDebug ze stałą WP_DEBUGzdefiniowaną w wp-config.php.

Zobacz także mój post na ten temat i zachęcamy do komentowania i dzielenia się opiniami na temat narzędzi programistycznych.


2

Polecam sprawdzić FirePHP . Możesz wysłać informacje o debugowaniu do Firebug Firefoksa przez nagłówki HTTP, co zwykle zapewnia czystsze wyniki debugowania.



1

Istnieją dwa środowiska IDE, które mogę polecić i oba używałem szeroko: PhpED (tylko Windows) i PhpStorm + XDEBUG (Mac, Windows i Linux.) Jestem teraz na Macu, więc mogę używać tylko tego drugiego.

Oba ROCK! Dobra wiadomość, że PhpStorm kosztuje 49 USD przed wrześniem 2010 r., A dopiero potem 99 USD. Gdybym był w systemie Windows i musiałem ponownie wybrać, nie jestem pewien, który wybrałbym.

Szczerze mówiąc, nie mogę nie myśleć, że każdy programista wtyczek, który nie korzysta z jednego z tych dwóch narzędzi, jest poważnie upośledzony, szczególnie jeśli są stosunkowo nowi w tworzeniu wtyczek WordPress.


1

Krumo - stylowa klasa debugowania php

Kolejną naprawdę miłą rzeczą jest klasa php „krumo”. Jest zaimplementowany w ½ min i oferuje łatwy sposób debugowania wszelkiego rodzaju zmiennych:

  • przedmioty,
  • tablice,
  • strings / float / integer / etc.

Ponadto pomaga w śledzeniu wstecznym, pokazuje załadowane klasy lub dołączone pliki i wszystko na żądanie.

Plus to ZA DARMO!

Pobieranie

Krumo @sourceforge


0

Używam wtyczki o wartości 13 USD o nazwie LogPress, którą można kupić w ThemeForest i jest to absolutnie God-send. Możesz debugować wszystko, co dotyczy ich wtyczek i strony. Obsługuje logowanie do konsoli Firebug i wiele więcej. Nie mogę bez niego żyć, dlatego korzystam z tej wtyczki.

Ta wtyczka jest prawdopodobnie najlepszymi pieniędzmi, jakie kiedykolwiek wydałam i pozwoliła zaoszczędzić niezliczone godziny na rozwoju wtyczek Wordpress.


Wow, nie podobało mi się to, że polecam płatną wtyczkę, z którą nie mam żadnego związku? To trochę ciężka ręka, prawda?
Dwayne Charrington,

Nie jestem jedynym, który głosował, ale nie jestem zaskoczony. Używasz słów, jakbyś próbował sprzedać wtyczkę. Polecanie rzeczy jest w porządku, ale pchanie twardej sprzedaży jak „absolutne zesłanie Boga”. Ludzie nienawidzą reklam. Po prostu stonuj język, a rekomendacja będzie mówić sama za siebie.
icc97

0

Używam phpED i xdebug, ale dla mnie (i wydaje się, że dla kogoś innego) debugowanie wtyczek lub pliku motywu jest niemożliwe! Debuger zatrzymuje się tylko na punktach przerwania, które znajdują się w głównym lub oryginalnym pliku „rdzenia”! ktoś może mi pomóc?


0

Najpierw dodaję define('WP_DEBUG', false);do pliku wp-config.php (jak większość osób powiedziała) moją instalację lokalną, która jest najnowszą kopią odpowiedniego serwisu produkcyjnego (zarówno plików, jak i danych). To sprawia, że ​​rzeczy są szybkie, bezpieczne, oddzielne, ale dobrze odzwierciedlają przynajmniej jedno miejsce, w którym wtyczka będzie faktycznie używana.

Dodam również wtyczkę paska debugowania wraz z niektórymi dodatkami paska debugowania (na przykład przejściowe) - odpowiednio do twoich wtyczek.

Używam również dodatku Firebug dla Firefoksa, który jest doskonały do ​​śledzenia problemów z HTML, CSS i JavaScript, a także do sprawdzania dziwności układu.

Koduję za pomocą UltraEdita, którego używam od ponad 15 lat do całej gamy kodowania (od php do SQL) zarówno w pracy, jak i w domu, więc to działa dobrze dla mnie, ale może nie mam wystarczająco dużo, aby ocenić jako IDE dla wielu ludzi. Posiada funkcje podświetlania składni, automatyczne uzupełnianie i układ kodu oraz kilka skrótów HTML i CSS, które pomagają unikać literówek i tym podobne. Przeważnie przynosi mi to znajomość, która jest ważnym aspektem często pomijanym w pośpiechu do nowego. Pamięć mięśni pomaga w powtarzalności nawet podczas kodowania.

I oczywiście zazwyczaj mam odpowiednią stronę z kodeksu otwartą w innej zakładce na odpowiednim przykładzie.

Wszystkie one pomagają w różny sposób uwidaczniać błędy w kodowaniu, analizie składniowej, błędach funkcjonalnych i błędach w układzie i nie wpływają zbytnio na sposób kodowania lub brak błędów. Większość można na chwilę zignorować lub dezaktywować, jeśli eksperymentujesz lub pracujesz nad czymś, do czego później powrócisz.

Aha, i nie ma nic złego w dobrze ustawionym echu lub print_r, aby sprawdzić coś na klawiszu (o ile usuniesz je po zakończeniu).



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.