Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Debug с заходом в Java.lang / 18 сообщений из 18, страница 1 из 1
19.02.2019, 22:33
    #39776489
faustgreen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Debug с заходом в Java.lang
Есть код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
package codePoint;

public class StringFromCodePoint {
	public static void main(String[] args) {
		
		// Russian letters.
		System.out.print("Russian letters: ");
		for (int i = 1040; i<=1103; i++)
			System.out.print(newString(i));
		
		System.out.println();
		
		// Chinese symbol.
		System.out.println("Chinese symbol: " + newString(37329));
		
		char c = 37329;
		System.out.println(c);
		
		// char c2 = 65536; Compile error char type is limited by 65535. 
		System.out.println("symbol: " + newString(2000000));
	}
	
	static String newString(int codePoint) {
	    if (Character.charCount(codePoint) == 1) {
	        return String.valueOf((char) codePoint);
	    } else {
	        return new String(Character.toChars(codePoint));
	    }
	}
	
}

// http://www.oracle.com/us/technologies/java/supplementary-142654.ht



При попытке его дебажить со строки
Код: java
1.
System.out.println("symbol: " + newString(2000000));

по шагам, курсор доходит до строки
Код: java
1.
return new String(Character.toChars(codePoint));

метода newString и выбрасывает ексепшн. При этом он не заходит в сам метод Character.toChars(codePoint), а в окне Debug пишет, что код не доступен.

Как сделать так, чтобы дебагер заходил в код класса Character (Примечание: source у меня приатачен и я могу видеть код метода Character.toChars по нажатию на нем Ctrl+click).
...
Рейтинг: 0 / 0
19.02.2019, 22:43
    #39776491
faustgreen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Debug с заходом в Java.lang
По самому коду вопросов нет, эксепшен вылетает из-за того что превышено максимальное значение codePoint, но до момента выброса исключения пробегается некоторый код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    public static char[] toChars(int codePoint) {
        if (isBmpCodePoint(codePoint)) {
            return new char[] { (char) codePoint };
        } else if (isValidCodePoint(codePoint)) {
            char[] result = new char[2];
            toSurrogates(codePoint, result, 0);
            return result;
        } else {
            throw new IllegalArgumentException();
        }
    }

Вот по этому коду я и хочу пробежаться дебагером!
...
Рейтинг: 0 / 0
20.02.2019, 00:04
    #39776503
faustgreen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Debug с заходом в Java.lang
Вообщем докопался:
Код: java
1.
2.
3.
Update the build path of the project to use a JDK instead of JRE.
JREs do not include debug information
(https://stackoverflow.com/questions/22205155/debug-point-inside-the-java-util-class).



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

Остались вопросы:
1). Вроде бы для того, чтобы видеть переменные, нужно перекомпилировать файл rt.jar(но мне это сейчас не актуально).
2). Что такое debug информация, как с ней работать и нужно ли ее прикреплять к своим классам?
3). Есть ли разница, с чем работать с JRE или JDK?

Если у кого есть ссылки на хорошие материалы по теме - поделитесь. Тема закрыта. Спасибо.
...
Рейтинг: 0 / 0
20.02.2019, 00:46
    #39776508
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Debug с заходом в Java.lang
faustgreen, отладочная информация по умолчанию включается в компилляцию.

это опции:
Код: java
1.
2.
3.
  -g                         Generate all debugging info
  -g:none                    Generate no debugging info
  -g:{lines,vars,source}     Generate only some debugging info


Тоесть любой ваши бинарник по умолчанию совместим с отладкой. Если вы уберете эту информацию
например :lines тогда не будет связи между опкодом и строчкой в исходном коде
и ваш отладчик не сможет прыгнуть в точное место.

JRE нужно ставить только конечному пользователю чтобы запускать java-приложения локально.

Некоторые современные оконные приложения поставляются вместе с jre или альтернативными упаковщиками
которые делают "почти экзешник".
...
Рейтинг: 0 / 0
20.02.2019, 10:27
    #39776600
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Debug с заходом в Java.lang
maytonJRE нужно ставить только конечному пользователю чтобы запускать java-приложения локально.

JDK от JRE отличается наличием компилятора, исходников и некоторых инструментов, нужных только разработчику. Для выполнения скомпилированного приложения достаточно только JRE. Для компиляции нового приложения нужно JDK. Но если вы используете Eclipse, то у него есть свой компилятор, ему JDK не обязательно.
...
Рейтинг: 0 / 0
20.02.2019, 11:05
    #39776625
cossack5
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Debug с заходом в Java.lang
В Идее отладчик по умолчанию не заходит в пакеты com.sun.*/ sun.* синтетические методы, сгенерированные в рантайме методы, классы и т.д. Настраивается в Debugger/Stepping.
...
Рейтинг: 0 / 0
20.02.2019, 11:35
    #39776643
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Debug с заходом в Java.lang
faustgreenКак сделать так, чтобы дебагер заходил в код класса Character
Фильтры настраивали?
...
Рейтинг: 0 / 0
20.02.2019, 12:42
    #39776685
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Debug с заходом в Java.lang
GarrickmaytonJRE нужно ставить только конечному пользователю чтобы запускать java-приложения локально.

JDK от JRE отличается наличием компилятора, исходников и некоторых инструментов, нужных только разработчику. Для выполнения скомпилированного приложения достаточно только JRE. Для компиляции нового приложения нужно JDK. Но если вы используете Eclipse, то у него есть свой компилятор, ему JDK не обязательно.
У меня есть сомнения в "правильности использования встроенных" компилляторов.
...
Рейтинг: 0 / 0
20.02.2019, 14:09
    #39776743
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Debug с заходом в Java.lang
maytonУ меня есть сомнения в "правильности использования встроенных" компилляторов.1. javac умеет кросскомпиляцию;
2. Чтобы получить javac и некоторые другие утилиты Java 6/7/8 достаточно добавить tools.jar в jre/lib/;
3. Чтобы удобно вызывать компилятор - достаточно простенькой обёртки.
Как пример
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public static
void main(String[] args)
{
  javax.tools.JavaCompiler jc =
  javax.tools.ToolProvider.getSystemJavaCompiler();
  if (jc == null) {
    System.err.println(" Compiler tool is not available.");
    System.exit(1);
  }
  jc.run(System.in, System.out, System.err, args);
}

...
Рейтинг: 0 / 0
20.02.2019, 14:18
    #39776750
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Debug с заходом в Java.lang
Ну даже в этом случае вам нужно втащить в систему 3 штуки JDK. Помним о том что автор хотел отладку
системного кода.
...
Рейтинг: 0 / 0
20.02.2019, 14:30
    #39776753
faustgreen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Debug с заходом в Java.lang
GarrickФильтры настраивали?

Я так понимаю на приведенной вами картинке (меню Windows-Preference-Java-Debug-Step filtering), записи, которые отмечены птичкой, наоборот будут исключены из прохода дебагером. Вот что в хелпе eclipse написано:
Код: java
1.
2.
3.
Step filters are commonly used to filter out types that you do not wish to see or step through while debugging.

For example, if you did not want to the see or step through anything from the class java.lang.Object, you would add this to the list of filtered types.



Т.е., если я правильно понял, у нас изначально дебагер должен иметь возможность бегать по коду всех классов, а настройками Step Filtering мы можем ограничивать общий список.

Дома проверю.
...
Рейтинг: 0 / 0
20.02.2019, 16:02
    #39776815
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Debug с заходом в Java.lang
maytonНу даже в этом случае вам нужно втащить в систему 3 штуки JDK6/7/8 - это там, где приём работает. В Java 6 вообще появилось API, восьмёрка - последняя немодуляризированная версия.
Ну и "втащить JDK" - совсем не требуется. Достаточно только rt.jar нужной версии, если целевая версия отличается от рабочей.
Можно и без rt.jar "чужой" версии, но тогда компилятор предупредит, что версию байт-кода он гарантирует, а вот API - не очень.
Помним о том что автор хотел отладку системного кодаЯ отвечал не на странные хотелки автора, а на ваше сомнение о встроенных компиляторах.
...
Рейтинг: 0 / 0
20.02.2019, 17:26
    #39776865
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Debug с заходом в Java.lang
Как будет угодно. rt.jar на улице не валяется. Вы все равно будете "качать" JDK.
Может для кого-то проблема держать на машинке 2 джедеки? У меня их 4 штуки
и я нормально пока себя чувствую.
...
Рейтинг: 0 / 0
20.02.2019, 17:38
    #39776873
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Debug с заходом в Java.lang
faustgreenGarrickФильтры настраивали?

Я так понимаю на приведенной вами картинке (меню Windows-Preference-Java-Debug-Step filtering), записи, которые отмечены птичкой, наоборот будут исключены из прохода дебагером. Вот что в хелпе eclipse написано:
Код: java
1.
2.
3.
Step filters are commonly used to filter out types that you do not wish to see or step through while debugging.

For example, if you did not want to the see or step through anything from the class java.lang.Object, you would add this to the list of filtered types.



Т.е., если я правильно понял, у нас изначально дебагер должен иметь возможность бегать по коду всех классов, а настройками Step Filtering мы можем ограничивать общий список.

Дома проверю.
Да, всё верно. Фильтрами настраивается именно то, куда не надо "заходить".
...
Рейтинг: 0 / 0
20.02.2019, 18:47
    #39776915
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Debug с заходом в Java.lang
maytonВы все равно будете "качать" JDK.И?..
...
Рейтинг: 0 / 0
20.02.2019, 18:50
    #39776918
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Debug с заходом в Java.lang
Basil A. Sidorov, к чему это?
...
Рейтинг: 0 / 0
20.02.2019, 19:00
    #39776922
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Debug с заходом в Java.lang
maytonBasil A. Sidorov, к чему это?К тому, что в гигабайтах загрузок мегабайты JDK никакой роли не играют.
Более того, когда я занимался поддержкой соответствующего софта, у меня было по нескольку выпусков каждой из разных версий - от Java 1.4 до Java 1.7.
Если всё ещё непонятно, то извольте: Расшифруйте, пожалуйста, что именно означает ваше замечание о необходимости "качать JDK?"

P.S.
Сборка, которую выдавали разработчики имела размер 200-280МБ.
Это сравнимо с размером JDK или превышает его, но при этом обновление JDK происходит относительно редко, а обновления софта - относительно часто.
...
Рейтинг: 0 / 0
20.02.2019, 19:20
    #39776931
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Debug с заходом в Java.lang
Ладно. Проехали. Я не измерял мегабайты. Я измерял активности человека в часах.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Debug с заходом в Java.lang / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]