NetBeans + xdebug: точка останова

Вурдалак

Продвинутый новичок
Я вот что-то нихера не понимаю как остановить выполнение скрипта на определённой строчке в определённом файле. Есть приложение (на symfony), я в каком-то файле (не index.php) ставлю точку останова, запускаю отладку. Если сразу нажать F5, то меня перекинет в самый конец. Если же жать на F7 (Войти), то можно состариться, пока я выйду на файл с тем кодом, где поставил breakpoint. Как нормально перейти к точке останова?

Есть ещё одна крайне серьёзная проблема. После запуска/остановки отладки каждый раз будет открываться страница в браузере? Нельзя как-то в фоновом режиме запускать?
 

magic

lancer
Если сразу нажать F5, то меня перекинет в самый конец. Если же жать на F7 (Войти), то можно состариться, пока я выйду на файл с тем кодом, где поставил breakpoint. Как нормально перейти к точке останова?
F5 это вроде запуск, а не отладка. Сам кнопки не жму, использую мышку. Моя последовательность такая:
установить точку прерывания
нажать иконку отладки
в браузере вызвать страничку, которая обратится к моему коду
собственно отладка

После запуска/остановки отладки каждый раз будет открываться страница в браузере? Нельзя как-то в фоновом режиме запускать?
Да, по умолчанию будет открывать страничка. Можно приаттачить отладчик к уже запущенному браузеру. Должно быть где-то в настройках.

Можешь почитать http://netbeans.org/kb/docs/php/debugging_ru.html
 

Вурдалак

Продвинутый новичок
Не понимаю принципа работы.

Когда я нажимаю Ctrl + F5 (отладить проект) и открывается страница http://example.com/?XDEBUG_SESSION_START=netbeans-xdebug, то что происходит? Вот ты говоришь:
в браузере вызвать страничку, которая обратится к моему коду
OK, пока страница http://example.com/?XDEBUG_SESSION_START=netbeans-xdebug «типа» грузится, я открываю другую вкладку и вбиваю http://example.com/user/view/42 в отладчике же них.я не происходит (т.н. «текущий счётчик программы» так и стоит на первой инструкции в index.php). Нажимаю F5 — все кнопки, кроме «Остановить отладку» становятся неактивными. Или ты имешь в виду что-то другое?

Если у меня весь код в одном файле, как в идиотском примере по ссылке, то да, выполняется до точки останова после нажатия на F5 (это «Продолжить»). Но нахуя нужен отладчик с одним файлом?
 

Ирокез

бессмертный пони
Команда форума
Партнер клуба
Для удобства, воспользуйся показать номера строк код, появится куча пронумерованных строчек
теперь на любом номер строчки нажми мышкой, появится красный кважратик, тут выполнение остановится

Можно еще
Ctrl+F8

на строке
 

tz-lom

Продвинутый новичок
а может у тебя просто бряка стоит не там где надо?
она может стоять в неперехватываемом месте (вроде должно отображаться разбитым квадратиком,но хз всегда ли правильно он ставится) , а так же код может тупо не наступить на бряку
может из за этого?
 
  • Like
Реакции: Koc

Вурдалак

Продвинутый новичок
Да не, точку останова я специально выбираю нечто вроде
PHP:
$i = 0;
просто для теста.

Я запутался окончательно. Есть код:
PHP:
<?php

require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');

$configuration = ProjectConfiguration::getApplicationConfiguration('chat', 'prod', true);
$x = 0;
$x = 1;
sfContext::createInstance($configuration)->dispatch();
$x = 2;
Делаю три breakpoint'а: для каждой строчки с $x. До первых двух добираюсь достаточно быстро (но всё это время страница http://example.com/?XDEBUG_SESSION_START=netbeans-xdebug грузится), до третьего не добираюсь: в NetBeans пишет «выполняется» (и, по-моему, так и повисает), а страница http://example.com/?XDEBUG_SESSION_START=netbeans-xdebug прекращает грузится (практически сразу).

Что за ...?

P.S. На простейшем коде из двух файлов проверил — проблем нет.
 

Вурдалак

Продвинутый новичок
OK, видно где-то до этого symfony останавливает выполнение кода и до той строчки дело не доходит. Дебаг ради дебага, пиз...ц.
 

pilot911

Новичок
а можно из консоли работать с хдебагом? я пробовал, не получилось.. а жаль
 

magic

lancer
открывается страница http://example.com/?XDEBUG_SESSION_START=netbeans-xdebug, то что происходит?
Netbeans соединяется с отладчиком, останавливается на первой строке кода и ждет твоих дальнейших действий.

OK, пока страница http://example.com/?XDEBUG_SESSION_START=netbeans-xdebug «типа» грузится, я открываю другую вкладку и вбиваю http://example.com/user/view/42 в отладчике же них.я не происходит (т.н. «текущий счётчик программы» так и стоит на первой инструкции в index.php).
У тебя по умолчанию включена опция "останавливаться на первой строке индексного файла". Ничего не происходит, потому что netbeans уже сделал остановку. Скорее всего это и сбивает с толку.

Жмешь кнопку продолжения отладки, отрабатывается твой стартовый скрипт и netbeans остается в режиме соединения с отладчиком. После этого переходишь на необходимый адрес и получаешь остановку в нужном месте.

Опцию обязательной остановки в первой строке кода можно отключить. В параметрах редактора, вкладка php/debug - "stop at first line". Вроде так пишется. Отключи нафиг эту опцию и все станет понятно.
 

tz-lom

Продвинутый новичок
искал в гугле информацию, так и не нашел ничего полезного по консольной отладке - не подскажешь, какие файлы?
настраиваете отладчик для консоли так же как и для веба и всё работает
Код:
$ cat /etc/php/cli-php5.3/ext/xdebug.ini 
zend_extension=/usr/lib64/php5.3/lib/extensions/no-debug-zts-20090626/xdebug.so
xdebug.auto_trace="0"
xdebug.trace_output_dir="/tmp"
xdebug.trace_output_name="trace.%c"
xdebug.trace_format="0"
xdebug.trace_options="0"
xdebug.collect_includes="1"
xdebug.collect_params="0"
xdebug.collect_return="0"
xdebug.collect_vars="0"
xdebug.default_enable="0"
xdebug.extended_info="1"
xdebug.manual_url="http://www.php.net"
xdebug.max_nesting_level="100"
xdebug.show_exception_trace="0"
xdebug.show_local_vars="0"
xdebug.show_mem_delta="0"
xdebug.dump.COOKIE="NULL"
xdebug.dump.ENV="NULL"
xdebug.dump.FILES="NULL"
xdebug.dump.GET="NULL"
xdebug.dump.POST="NULL"
xdebug.dump.REQUEST="NULL"
xdebug.dump.SERVER="NULL"
xdebug.dump.SESSION="NULL"
xdebug.dump_globals="1"
xdebug.dump_once="1"
xdebug.dump_undefined="0"
xdebug.profiler_enable="0"
xdebug.profiler_output_dir="/tmp"
xdebug.profiler_output_name="cachegrind.out.%p"
xdebug.profiler_enable_trigger="0"
xdebug.profiler_append="0"
xdebug.profiler_aggregate="0"
xdebug.remote_enable="on"
xdebug.remote_handler="dbgp"
xdebug.remote_host="localhost"
xdebug.remote_mode="req"
xdebug.remote_port="9000"
xdebug.remote_autostart="0"
xdebug.remote_log=""
xdebug.idekey=""
xdebug.var_display_max_data="512"
xdebug.var_display_max_depth="2"
xdebug.var_display_max_children="128"
 

Вурдалак

Продвинутый новичок
magic, спасибо за терпение, но проблема не исчезает. Вот как такое может быть, если я делаю breakpoint на строке с $cookieName, но остановка не происходит. При этом текст «fucking test» я вижу:
PHP:
  public function execute($filterChain)
  {
    $cookieName = sfConfig::get('app_sf_guard_plugin_remember_cookie_name', 'autologin_key');
    $request = $this->context->getRequest();
    die('fucking test');
  }
Т.е. я нажимаю «продолжить», всё OK, код прогоняется через отладчик, но breakpoint стоящий где-то в index.php он «видит», а где-то глубоко в коде — нет. Хотя строка с $cookieName (или $request), по-моему, абсолютно пригодные для breakpoint'а, код в этом месте выполняется, на что указывает «fucking test». WTF, собственно?
 

magic

lancer
1. Посмотри, нет ли двойного включения xdebug.
Например
$ php -v
Php Warning: Module 'xdebug' already loaded in Unknown on line 0
2. Точку останова можно сделать напрямую в PHP коде:
PHP:
xdebug_break();
3. Показывай конфиги.
 

Вурдалак

Продвинутый новичок
1)
Код:
C:\Users\***>php.exe -v
PHP 5.3.3 (cli) (built: Jul 21 2010 20:03:25)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Xdebug v2.1.1, Copyright (c) 2002-2011, by Derick Rethans
3) http://pastebin.com/H18TiKLB

Сейчас оно заработало, хотя я вроде бы ничего не менял. :confused:

UPD: может быть виновата IDE, когда по каким-то причинам не относила открытый файл с поставленным breakpoint'ом к открытому проекту... И поэтому просто не останавливалась.
 

c-alex

Новичок
отладка (debug) еще может НЕ работать из-за mod_rewrite (как было у меня)
нашел вот такой топик: "netbeans прекрасно работает с xdebug`ом до тех пор, пока не подрублен mod_rewrite"
http://www.askdev.ru/question/18176/Вопрос-о-настройке-xdebug-и-netbeans/
установил easy Xdebug.
запускаю отладку как обычно. NetBeans открывает окно браузера (в настройках проекта я НЕ запретил открытие дебага в браузере) - точки останова не работают с ЧПУ URL. Нажимаю на зеленого жука (иконка easy Xdebug) в панели дополнений внизу (http://alllexe.com/wp-content/uploads/2010/12/easyXdebug.png). Она меняется на жука с красным минусом - в таком режиме обновляю страницу - точки останова работают, все хорошо.
 
Сверху