powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Debug с заходом в Java.lang
18 сообщений из 18, страница 1 из 1
Debug с заходом в Java.lang
    #39776489
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть код:
Код: 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
Debug с заходом в Java.lang
    #39776491
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По самому коду вопросов нет, эксепшен вылетает из-за того что превышено максимальное значение 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
Debug с заходом в Java.lang
    #39776503
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем докопался:
Код: 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
Debug с заходом в Java.lang
    #39776508
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Debug с заходом в Java.lang
    #39776600
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonJRE нужно ставить только конечному пользователю чтобы запускать java-приложения локально.

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

JDK от JRE отличается наличием компилятора, исходников и некоторых инструментов, нужных только разработчику. Для выполнения скомпилированного приложения достаточно только JRE. Для компиляции нового приложения нужно JDK. Но если вы используете Eclipse, то у него есть свой компилятор, ему JDK не обязательно.
У меня есть сомнения в "правильности использования встроенных" компилляторов.
...
Рейтинг: 0 / 0
Debug с заходом в Java.lang
    #39776743
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Debug с заходом в Java.lang
    #39776750
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну даже в этом случае вам нужно втащить в систему 3 штуки JDK. Помним о том что автор хотел отладку
системного кода.
...
Рейтинг: 0 / 0
Debug с заходом в Java.lang
    #39776753
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Debug с заходом в Java.lang
    #39776815
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНу даже в этом случае вам нужно втащить в систему 3 штуки JDK6/7/8 - это там, где приём работает. В Java 6 вообще появилось API, восьмёрка - последняя немодуляризированная версия.
Ну и "втащить JDK" - совсем не требуется. Достаточно только rt.jar нужной версии, если целевая версия отличается от рабочей.
Можно и без rt.jar "чужой" версии, но тогда компилятор предупредит, что версию байт-кода он гарантирует, а вот API - не очень.
Помним о том что автор хотел отладку системного кодаЯ отвечал не на странные хотелки автора, а на ваше сомнение о встроенных компиляторах.
...
Рейтинг: 0 / 0
Debug с заходом в Java.lang
    #39776865
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как будет угодно. rt.jar на улице не валяется. Вы все равно будете "качать" JDK.
Может для кого-то проблема держать на машинке 2 джедеки? У меня их 4 штуки
и я нормально пока себя чувствую.
...
Рейтинг: 0 / 0
Debug с заходом в Java.lang
    #39776873
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Debug с заходом в Java.lang
    #39776915
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВы все равно будете "качать" JDK.И?..
...
Рейтинг: 0 / 0
Debug с заходом в Java.lang
    #39776918
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov, к чему это?
...
Рейтинг: 0 / 0
Debug с заходом в Java.lang
    #39776922
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonBasil A. Sidorov, к чему это?К тому, что в гигабайтах загрузок мегабайты JDK никакой роли не играют.
Более того, когда я занимался поддержкой соответствующего софта, у меня было по нескольку выпусков каждой из разных версий - от Java 1.4 до Java 1.7.
Если всё ещё непонятно, то извольте: Расшифруйте, пожалуйста, что именно означает ваше замечание о необходимости "качать JDK?"

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


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