W jaki sposób można debugować skrypty PHP?

głosy
405

W jaki sposób można debugować PHP skrypty?

Zdaję sobie sprawę z podstawowej debugowanie takich jak przy użyciu raportowania błędów. Punkt przerwania debugowania w PHPEclipse jest również bardzo przydatny.

Jaki jest najlepszy (pod względem szybkiego i łatwego) sposób debugowania w phpStorm lub innego IDE?

Utwórz 04/08/2008 o 00:18
źródło użytkownik
W innych językach...                            


30 odpowiedzi

głosy
16

Użyłem Zend Studio (5.5) wraz z Zend Platform . To daje właściwego debugowanie, pułapki / przestępując kodu itp, chociaż w cenie.

Odpowiedział 04/08/2008 o 00:20
źródło użytkownik

głosy
145

Spróbuj Eclipse PDT do konfiguracji środowiska Eclipse, które funkcje debugowania jak wspomniałeś. Zdolność do czynności w kodzie jest znacznie lepszym sposobem na debugowanie następnie starą metodę var_dump i wydrukować w różnych punktach, aby zobaczyć, gdzie przepływ idzie źle. Kiedy wszystko inne zawiedzie i choć mam tylko SSH i vim Wciąż var_dump()/ die()dowiedzieć się, gdzie kod idzie na południe.

Odpowiedział 04/08/2008 o 00:28
źródło użytkownik

głosy
2

print_r (debug_backtrace ());

czy coś takiego :-)

Odpowiedział 04/08/2008 o 00:32
źródło użytkownik

głosy
14

Xdebug przez Derick Rethans, jest bardzo dobra. Używałem go jakiś czas temu i okazało się, że nie było tak łatwe do zainstalowania. Kiedy skończysz, nie rozumiem, jak udało ci bez niego :-)

Jest dobry artykuł na Zend Developer Strefie (instalowania w systemie Linux nie wydaje się łatwiejsze) a nawet wtyczki Firefox , która nigdy nie używany.

Odpowiedział 04/08/2008 o 22:07
źródło użytkownik

głosy
16

Szczerze mówiąc, to połączenie druku i print_r (), aby wydrukować zmienne. Wiem, że wielu woli korzystać z innych bardziej zaawansowanych metod, ale uważam to najłatwiejsze w użyciu.

Powiem, że nie w pełni docenić to, aż zrobiłem kilka programowanie mikroprocesora w uni i nie był w stanie wykorzystać nawet tego.

Odpowiedział 04/08/2008 o 22:28
źródło użytkownik

głosy
1

+1 do print_r (). Użyj go, aby zrzucić zawartość obiektu lub zmiennej. Aby uczynić go bardziej czytelnym, zrób to z pre tag więc nie ma potrzeby, aby wyświetlić źródło.

echo '<pre>';
print_r($arrayOrObject);

Również var_dump ($ rzeczą) - jest to bardzo przydatne, aby zobaczyć rodzaj subthings

Odpowiedział 05/08/2008 o 01:49
źródło użytkownik

głosy
80

Można użyć Firephp dodatek do Firebug do debugowania PHP w tym samym środowisku co javascript.

Używam również Xdebug wspomniano wcześniej do profilowania php.

Odpowiedział 05/08/2008 o 18:22
źródło użytkownik

głosy
0

W zależności od problemu I jak połączenie error_reporting (E_ALL) zmieszanego z badań echo (aby znaleźć linię naruszające / file błąd wydarzyło się w initally, Ty wiesz, że nie zawsze php linia / file informuje prawda?), Pasujące IDE nawiasów (aby rozwiązać "błąd analizy: błąd składni, nieoczekiwany koniec $" Issues), a print_r (); wyjście; wysypisk (Real programiści zobaczyć źródła; p).

Nie można też pokonać phpdebug (sprawdź SourceForge) z "memory_get_usage ();" i "memory_get_peak_usage ()"; znaleźć obszary problemowe.

Odpowiedział 06/08/2008 o 16:46
źródło użytkownik

głosy
17

1) używać print_r (). W TextMate, mam fragment dla „pre”, która rozszerza się do tego:

echo "<pre>";
print_r();
echo "</pre>";

2) Używam xdebug, ale nie byli w stanie uzyskać GUI prawo do pracy na moim Macu. To przynajmniej wypisuje czytelną wersję ślad stosu.

Odpowiedział 07/08/2008 o 01:25
źródło użytkownik

głosy
1

W środowisku produkcyjnym, loguję odpowiednie dane do dziennika błędów serwera z error_log ().

Odpowiedział 15/08/2008 o 05:23
źródło użytkownik

głosy
1

Używam Zend Studio for Eclipse z wbudowanego debuggera. Jest nadal powolny w porównaniu do debugowania z Eclipse PDT z XDebug. Mam nadzieję, że będą one rozwiązać te problemy, prędkość uległa poprawie w ciągu ostatnich wydaniach ale nadal przestępując rzeczy trwa 2-3 sekundy. Pasek Zend firefox naprawdę sprawia, że ​​rzeczy proste (debug następnej stronie bieżącej strony, etc). Zapewnia również, że profilera, który będzie punktem odniesienia swój kod i zapewnić Piusa wykresy, czas wykonania, itd

Odpowiedział 17/08/2008 o 19:38
źródło użytkownik

głosy
8

Dla naprawdę ziarnistej problemów, które byłoby zbyt czasochłonne, aby użyć print_r / echo, aby dowiedzieć się, używam (PhpED) funkcję debugowania IDE. W przeciwieństwie do innych IDE używałem, PhpED wymaga prawie żadnej konfiguracji. jedynym powodem, dla którego nie należy go używać do żadnych problemów spotykam jest to, że boleśnie powolne. Nie jestem pewien, że powolność jest specyficzna PhpED lub debugger php. PhpED nie jest wolny, ale wierzę, że wykorzystuje jedną z debugerów open-source (jak XDebug wcześniej wymienionych) w każdym razie. Korzyść z PhpED, znowu, jest to, że nie wymaga żadnej konfiguracji, które znalazłem naprawdę dość uciążliwe w przeszłości.

Odpowiedział 22/08/2008 o 16:33
źródło użytkownik

głosy
4

Ręczne usuwanie błędów jest na ogół szybciej dla mnie - var_dump()i debug_print_backtrace()to wszystkie narzędzia potrzebne do uzbrajania z logiki.

Odpowiedział 22/08/2008 o 16:36
źródło użytkownik

głosy
26

XDebug ma zasadnicze znaczenie dla rozwoju. I zainstalować go przed każdym innym rozszerzeniem. Daje stos śladów na jakiekolwiek błędy i można łatwo włączyć profilowanie.

Dla szybkiego spojrzenia na zastosowania struktury danych var_dump(). Nie używać print_r(), ponieważ będziesz musiał otoczyć ją <pre>i drukuje tylko jedną var naraz.

<?php var_dump(__FILE__, __LINE__, $_REQUEST); ?>

Dla prawdziwego środowiska debugowania najlepszy Znalazłem to Komodo IDE ale kosztuje $$.

Odpowiedział 22/08/2008 o 16:43
źródło użytkownik

głosy
2

Komodo IDE działa dobrze z XDebug, nawet dla debugowania remore. Potrzebuje minimalnej ilości konfiguracji. Wszystko czego potrzebujesz to wersja php że Komodo można używać lokalnie do kroku przez kod na przerwania. Jeśli skrypt importowane do Komodo projektu, można ustawić punkty przerwania z kliknięciem myszy, jak należy ustawić go w środku zaćmienia do debugowania programu Java. Zdalne debugowanie jest oczywiście bardziej skomplikowany, aby zmusić go do pracy prawidłowo (może trzeba mapować zdalnego adresu URL za pomocą skryptu php w obszarze roboczym) niż lokalnej konfiguracji debugowania, który jest dość łatwy w konfiguracji, jeśli na komputerze Mac lub pulpicie linux ,

Odpowiedział 22/08/2008 o 16:44
źródło użytkownik

głosy
0

Zintegrowany debugger, gdzie można obserwować zmiany wartości zmiennej po kroku za pomocą kodu są naprawdę fajne. Oni jednak wymagać konfiguracji oprogramowania na serwerze i pewnej ilości konfiguracji na kliencie. Oba które wymagają okresowej konserwacji, aby utrzymać w dobrym stanie.

Print_r jest łatwo pisać i jest gwarantowane do pracy w dowolnej konfiguracji.

Odpowiedział 22/08/2008 o 21:10
źródło użytkownik

głosy
11

Używam Netbeans z XDebug. Sprawdź to na swojej stronie internetowej w Dokumentach, jak go skonfigurować. http://php.netbeans.org/

Odpowiedział 26/08/2008 o 16:04
źródło użytkownik

głosy
32

Xdebug i wtyczki DBGp dla Notepad ++ dla Heavy Duty bug polowania, FirePHP dla lekkiego materiału. Szybko i brudno? Nic nie przebije dBug .

Odpowiedział 15/09/2008 o 21:23
źródło użytkownik

głosy
9

PHPEdit posiada wbudowany debugger, ale zazwyczaj kończy się przy użyciu echo (); i print_r (); staroświecki sposób !!

Odpowiedział 17/09/2008 o 11:14
źródło użytkownik

głosy
3

Cóż, w pewnym stopniu zależy od tego, gdzie wszystko idzie na południe. To pierwsza rzecz, którą starają się izolować, a następnie użyję echa / print_r () jako konieczną.

NB: Wiecie, że można przekazać prawdziwe jako drugi argument print_r () i będzie to powrót wyjścia zamiast drukować je? Na przykład:

echo "<pre>".print_r($var, true)."</pre>";
Odpowiedział 18/09/2008 o 04:17
źródło użytkownik

głosy
0

Zazwyczaj znajdę utworzyć niestandardową funkcję dziennika w stanie zapisać w pliku, o sklep debugowania, a następnie ponownie drukować na wspólnej stopce.

Można również zastąpić wspólną klasę wyjątku, tak, że ten typ debugowania jest półautomatyczny.

Odpowiedział 22/10/2008 o 09:46
źródło użytkownik

głosy
10

buforowanie wyjścia jest bardzo przydatna, jeśli nie chcesz zepsuć swój wynik. I zrobić to w jednej wkładki, które mogę komentarz / odkomentuj do woli

 ob_start();var_dump(); user_error(ob_get_contents()); ob_get_clean();
Odpowiedział 22/10/2008 o 10:16
źródło użytkownik

głosy
19

PhpED jest naprawdę dobra. Można wejść w / na / z funkcji. Można uruchomić kod ad-hoc, sprawdzić zmienne, zmienne zmian. To jest niesamowite.

Odpowiedział 05/02/2009 o 10:16
źródło użytkownik

głosy
38

To jest mój mały środowisko debugowania:

error_reporting(-1);
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_BAIL, 0);
assert_options(ASSERT_QUIET_EVAL, 0);
assert_options(ASSERT_CALLBACK, 'assert_callcack');
set_error_handler('error_handler');
set_exception_handler('exception_handler');
register_shutdown_function('shutdown_handler');

function assert_callcack($file, $line, $message) {
    throw new Customizable_Exception($message, null, $file, $line);
}

function error_handler($errno, $error, $file, $line, $vars) {
    if ($errno === 0 || ($errno & error_reporting()) === 0) {
        return;
    }

    throw new Customizable_Exception($error, $errno, $file, $line);
}

function exception_handler(Exception $e) {
    // Do what ever!
    echo '<pre>', print_r($e, true), '</pre>';
    exit;
}

function shutdown_handler() {
    try {
        if (null !== $error = error_get_last()) {
            throw new Customizable_Exception($error['message'], $error['type'], $error['file'], $error['line']);
        }
    } catch (Exception $e) {
        exception_handler($e);
    }
}

class Customizable_Exception extends Exception {
    public function __construct($message = null, $code = null, $file = null, $line = null) {
        if ($code === null) {
            parent::__construct($message);
        } else {
            parent::__construct($message, $code);
        }
        if ($file !== null) {
            $this->file = $file;
        }
        if ($line !== null) {
            $this->line = $line;
        }
    }
}
Odpowiedział 29/06/2009 o 14:40
źródło użytkownik

głosy
1

Większość błędów można znaleźć łatwo, po prostu var_dumping niektóre z kluczowych zmiennych, ale to oczywiście zależy od rodzaju aplikacji można rozwijać.

Dla bardziej złożonych algorytmów etapu / przerwania / funkcje zegarka są bardzo pomocne (jeśli nie jest to konieczne)

Odpowiedział 10/05/2010 o 10:18
źródło użytkownik

głosy
3

Często używam CakePHP gdy Rails nie jest możliwe. Debugować błędy zazwyczaj znaleźć error.logw katalogu tmp i ogon go w terminalu za pomocą polecenia ...

tail -f app/tmp/logs/error.log

To daje ty uruchomione okno z ciasta, co się dzieje, co jest bardzo przydatne, jeśli chcesz wstawić coś do niej połowy kodu można użyć.

$this->log('xxxx');

Może to zwykle daje dobre wyobrażenie o tym, co się dzieje / źle.

Odpowiedział 10/05/2010 o 10:29
źródło użytkownik

głosy
11

Używam Netbeans z XDebug i łatwego Xdebug Firefoxa

Add-on jest niezbędna podczas debugowania projektów MVC, ponieważ normalny sposób XDebug biegnie w Netbeans jest zarejestrowanie sesję dbug za pośrednictwem adresu URL. Z add-on zainstalowany w FireFox, należy ustawić właściwości projektu NetBeans -> Uruchom Configuratuion -> Zaawansowane i wybierz „Nie otwierać przeglądarkę internetową” Można teraz ustawić swoje punkty przerwy i rozpocząć sesję debugowania Ctrl-F5, jak zwykle , Otwórz przeglądarkę Firefox i kliknij prawym przyciskiem myszy ikonę Add-on w prawym dolnym rogu, aby rozpocząć monitorowanie pułapki. Gdy kod osiągnie punkt przerwania zostanie zatrzymane i można kontrolować swoje stany zmiennych i call-stack.

Odpowiedział 09/07/2010 o 04:14
źródło użytkownik

głosy
2

NuSphere to również dobry debugger dla php NuSphere

Odpowiedział 29/05/2012 o 13:43
źródło użytkownik

głosy
2

Istnieje wiele technik PHP debugowania, które można zapisać wiele godzin podczas kodowania. Skuteczna, ale podstawowe techniki debugowania jest po prostu włączyć raportowanie błędów. Innym nieco bardziej zaawansowana technika polega na użyciu instrukcji drukowania, co może pomóc zidentyfikować bardziej nieuchwytne błędy wyświetlając co faktycznie dzieje się na ekranie. PHPeclipse jest plug-in, który można podświetlić Eclipse typowych błędów składniowych i może być stosowany w połączeniu z debuggera ustawić punkty przerwania.

display_errors = Off
error_reporting = E_ALL 
display_errors = On

a także używane

error_log();
console_log();
Odpowiedział 01/10/2015 o 11:16
źródło użytkownik

głosy
1

PHP DBG

Interaktywny Stepthrough PHP Debugger wdrożony jako moduł SAPI który może dać Ci pełną kontrolę nad środowiskiem bez wpływu na funkcjonalność lub wydajność kodu. To ma być lekki, mocny, łatwy w obsłudze platformę debugowania dla PHP 5.4+ i to wysyłają out-of-box z PHP 5.6.

Funkcje obejmują:

  • Stepthrough debugowanie
  • Elastyczne Breakpoints (Metoda klasy, funkcja, Plik: Linia Adres, Opcode)
  • Łatwy dostęp do PHP z wbudowaną eval ()
  • Łatwy dostęp do aktualnie wykonywany kod
  • Userland API
  • Agnostic SAPI - łatwo zintegrować
  • Konfiguracja PHP File Support
  • JIT Super Globals - Ustaw własną !!
  • Opcjonalnie readline Support - Wygodne Operacja Terminal
  • Zdalne debugowanie Support - Dołączone GUI Java
  • Łatwa operacja

Zobacz zdjęcia:

PHP DBG - Stepthrough debugowanie - zrzut ekranu

PHP DBG - Stepthrough debugowanie - zrzut ekranu

Strona domowa: http://phpdbg.com/

PHP Error - Lepsze raportowanie błędów PHP

Jest bardzo łatwy w użyciu biblioteki (w rzeczywistości plik) do debugowania skryptów PHP.

Jedyną rzeczą, którą musisz zrobić, to włączyć jeden plik jak poniżej (na początku na kodzie):

require('php_error.php');
\php_error\reportErrors();

Następnie wszystkie błędy daje informacje, takie jak backtrace, kontekst kodu, argumentów funkcji, zmiennych serwerowych itp Na przykład:

PHP Błąd |  Poprawa Raportowanie błędów dla PHP - zrzut backtrace PHP Błąd |  Poprawa Raportowanie błędów dla PHP - zrzut backtrace PHP Błąd |  Poprawa Raportowanie błędów dla PHP - zrzut backtrace

Dodatki zawarte:

  • banalny w obsłudze, to tylko jeden plik
  • Błędy wyświetlane w wyszukiwarce normalnych i ajaxy wniosków
  • żądań AJAX są wstrzymane, co pozwala automatycznie ponownie je uruchomić
  • popełnia błędy tak restrykcyjne, jak to możliwe (zachęca jakość kodu, i zmierza do poprawy wydajności)
  • fragmenty kodu w całej ślad stosu
  • zawiera więcej informacji (takich jak pełne podpisów funkcja)
  • rozwiązuje niektóre komunikaty o błędach, które są po prostu źle
  • Podświetlanie składni
  • wygląda ślicznie!
  • dostosowywanie
  • ręcznie włączyć lub wyłączyć
  • uruchomić konkretne fragmenty bez raportowania błędów
  • ignorować plików pozwala uniknąć podkreślając kod w swoim ślad stosu
  • Pliki aplikacji; te są traktowane priorytetowo, gdy strajki Błąd!

Strona domowa: http://phperror.net/

GitHub: https://github.com/JosephLenton/PHP-Error

Mój widelec (z dodatkowymi poprawkami): https://github.com/kenorb-contrib/PHP-Error

DTrace

Jeśli system obsługuje DTrace dynamicznego śledzenia (domyślnie instalowany na OS X) a PHP zostało skompilowane z sond DTrace włączona ( --enable-dtrace), które powinny być domyślnie ta komenda może pomóc debugowania skryptu PHP z żadnym momencie:

sudo dtrace -qn 'php*:::function-entry { printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }'

Tak więc biorąc pod uwagę następujące alias został dodany do swoich rc plików (np ~/.bashrc, ~/.bash_aliases):

alias trace-php='sudo dtrace -qn "php*:::function-entry { printf(\"%Y: PHP function-entry:\t%s%s%s() in %s:%d\n\", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }"'

można prześledzić swój skrypt z łatwym do zapamiętania alias: trace-php.

Oto bardziej zaawansowany skrypt dtrace, wystarczy zapisać go do dtruss-php.dsprawiają, że plik wykonywalny ( chmod +x dtruss-php.d) i uruchom:

#!/usr/sbin/dtrace -Zs
# See: https://github.com/kenorb/dtruss-lamp/blob/master/dtruss-php.d

#pragma D option quiet

php*:::compile-file-entry
{
    printf("%Y: PHP compile-file-entry:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1));
}

php*:::compile-file-return
{
    printf("%Y: PHP compile-file-return:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), basename(copyinstr(arg1)));
}

php*:::error
{
    printf("%Y: PHP error message:\t%s in %s:%d\n", walltimestamp, copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}

php*:::exception-caught
{
    printf("%Y: PHP exception-caught:\t%s\n", walltimestamp, copyinstr(arg0));
}

php*:::exception-thrown
{
    printf("%Y: PHP exception-thrown:\t%s\n", walltimestamp, copyinstr(arg0));
}

php*:::execute-entry
{
    printf("%Y: PHP execute-entry:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}

php*:::execute-return
{
    printf("%Y: PHP execute-return:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}

php*:::function-entry
{
    printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}

php*:::function-return
{
    printf("%Y: PHP function-return:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}

php*:::request-shutdown
{
    printf("%Y: PHP request-shutdown:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}

php*:::request-startup
{
    printf("%Y, PHP request-startup:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}

Strona domowa: dtruss lampy na GitHub

Oto prosty sposób użycia:

  1. Run: sudo dtruss-php.d.
  2. Na innej perspektywie terminala: php -r "phpinfo();".

Aby sprawdzić, czy można przejść do dowolnego z docroot index.phpi uruchomić serwer PHP wbudowane przez:

php -S localhost:8080

Po tym można przejść pod adres http: // localhost: 8080 / (lub wybrać cokolwiek port jest wygodne dla Ciebie). Stamtąd dostęp do niektórych stron, aby zobaczyć wyjście śledzenia.

Uwaga: Dtrace jest dostępny na OS X domyślnie na Linux prawdopodobnie trzeba dtrace4linux lub sprawdzić kilka innych alternatyw .

Patrz: Korzystanie z PHP i DTrace na php.net


SystemTap

Można sprawdzić SystemTap śledzenia przez zainstalowanie pakietu rozwoju SystemTap SDT (na przykład yum install systemtap-sdt-devel).

Oto przykład skryptu ( all_probes.stp) do śledzenia wszystkich rdzeń PHP punktów sondy statycznej przez cały czas trwania uruchomionego skryptu PHP z SystemTap:

probe process("sapi/cli/php").provider("php").mark("compile__file__entry") {
    printf("Probe compile__file__entry\n");
    printf("  compile_file %s\n", user_string($arg1));
    printf("  compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("compile__file__return") {
    printf("Probe compile__file__return\n");
    printf("  compile_file %s\n", user_string($arg1));
    printf("  compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("error") {
    printf("Probe error\n");
    printf("  errormsg %s\n", user_string($arg1));
    printf("  request_file %s\n", user_string($arg2));
    printf("  lineno %d\n", $arg3);
}
probe process("sapi/cli/php").provider("php").mark("exception__caught") {
    printf("Probe exception__caught\n");
    printf("  classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("exception__thrown") {
    printf("Probe exception__thrown\n");
    printf("  classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("execute__entry") {
    printf("Probe execute__entry\n");
    printf("  request_file %s\n", user_string($arg1));
    printf("  lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("execute__return") {
    printf("Probe execute__return\n");
    printf("  request_file %s\n", user_string($arg1));
    printf("  lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("function__entry") {
    printf("Probe function__entry\n");
    printf("  function_name %s\n", user_string($arg1));
    printf("  request_file %s\n", user_string($arg2));
    printf("  lineno %d\n", $arg3);
    printf("  classname %s\n", user_string($arg4));
    printf("  scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("function__return") {
    printf("Probe function__return: %s\n", user_string($arg1));
    printf(" function_name %s\n", user_string($arg1));
    printf("  request_file %s\n", user_string($arg2));
    printf("  lineno %d\n", $arg3);
    printf("  classname %s\n", user_string($arg4));
    printf("  scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("request__shutdown") {
    printf("Probe request__shutdown\n");
    printf("  file %s\n", user_string($arg1));
    printf("  request_uri %s\n", user_string($arg2));
    printf("  request_method %s\n", user_string($arg3));
}
probe process("sapi/cli/php").provider("php").mark("request__startup") {
    printf("Probe request__startup\n");
    printf("  file %s\n", user_string($arg1));
    printf("  request_uri %s\n", user_string($arg2));
    printf("  request_method %s\n", user_string($arg3));
}

Stosowanie:

stap -c 'sapi/cli/php test.php' all_probes.stp

Patrz: Korzystanie z PHP SystemTap DTrace Static Sondy na php.net

Odpowiedział 21/03/2016 o 12:34
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more