Отладка Java-программы, запущенной из Tomcat (JSP) - PullRequest
3 голосов
/ 03 ноября 2010

Я не знаю, почему я никогда не сталкивался с необходимостью использовать отладчик для пошагового выполнения своей программы и просмотра происходящего, возможно, потому, что я привык использовать интерпретированные языки, такие как PHP, где его очень легко добавитьотладочный код (print_r) и живые изменения.

Однако, с этим новым Java-проектом, я чувствую, что должен изучить правильные способы отладки.

Итак, эта программа, которую я не писал, работает на Tomcat и использует базовые JSP.Проблема в том, что, когда я пытаюсь получить доступ к определенной странице JSP, она выдает исключение и дает мне трассировку стека того, что произошло:

org.apache.jasper.JasperException: java.lang.NullPointerException
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:503)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:363)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:306)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.sgrp.singer.filters.SingerLoginFilter.doFilter(SingerLoginFilter.java:128)

Как мне пройти через мою программу, используя такой инструмент, как JDB?Я не могу пройти через определенный класс, потому что мне нужно подражать тому, что делает мой JSP ... Я хотел бы сделать это через командную строку, без использования IDE.

Ответы [ 4 ]

2 голосов
/ 03 ноября 2010

Во-первых, java должен быть запущен с определенными параметрами, чтобы подключить отладчик:

-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

- это параметры, используемые для нашей цели.После этого вы используете вашу IDE и подключаетесь к отладчику удаленно.Вы устанавливаете точку останова для фрагмента кода (пожалуйста, убедитесь, что локальные файлы и удаленная программа имеют одинаковую ревизию) и генерируете ошибку.Вы можете также установить точки останова для необработанных исключений.

Подсказка: вы можете изменить вашу ссылочную ловушку-JSP (для нас error.jsp), чтобы отображать не только трассировку стека перехваченного исключения (напримерgetStracktrace), а также вызывающий stacktrace (ex.getCause (). getStacktrace ()).Это может помочь выявить причины исключений более высокого уровня.

Редактировать: Извините, без IDE это переполнение информации, которое может быть невозможно для человека.Приложения Tomcat сложны на архитектурном уровне, переключаясь между несколькими классами для самых простых запросов.

1 голос
/ 03 ноября 2010

JDB можно использовать, хотя это не будет моим первым выбором.

Вот хорошее объяснение, как его использовать: http://www.javaworld.com/javaworld/javaqa/2000-06/04-qa-0623-jdb.html

Не забудьте включить отладочную информацию при компиляции файлов и настройке Tomcat, чтобы вы могли подключиться кэто, это строка, как упоминалось в другом посте:

-Xdebug -Xnoagent -Djava.compiler = NONE-Xrunjdwp: сервер = y, transport = dt_socket, address = 8000, suspend = y

8000 можно заменить любым другим числовым значением.По сути, он указывает jvm прослушивать этот порт для отладчика.

Что произойдет сейчас, tomcat запустится, но приостановится и будет ждать подключения отладчика, прежде чем продолжить.

Запустите JDB иattach:

jdb -attach localhost: 8000

здесь, localhost можно заменить тем, где работает tomcat, если он работает на другом компьютере, и 8000 можно заменить на любой порт, который вы установили jvmв tomcat.

Теперь вы можете отлаживать, вы можете увидеть инструкции по отладке, если вы введете help в jdb.

1 голос
/ 03 ноября 2010

Альтернативное решение, которое может быть проще в использовании, чем подключение отладчика к Tomcat:

Сначала взгляните на стек вызовов.Внизу вы увидите ваш класс с именем org.sgrp.singer.filters.SingerLoginFilter.Проблема лежит здесь, в строке 128 метода doFilter.

В первой строке написано org.apache.jasper.JasperException: java.lang.NullPointerException.Это означает, что вы использовали объект, значение которого равно нулю в строке 128 упомянутого класса.

Проверьте этот код, чтобы узнать, что может быть не так.Кроме того, добавьте несколько операторов печати / записи в ваш код.

Отладка должна быть вашим последним средством.Вы можете собрать много информации, просто взглянув на трассировку стека.

0 голосов
/ 03 ноября 2010

Я всегда использовал отладчик eclipse: либо запускаю tomcat внутри eclipse, либо подключаю eclipse к отдельному, но локальному к eclipse, jboss-серверу.

Работает как сон, не нужно менять настройки jvm или что-то еще.

...