Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Что в данном классе пытается вызвать другой / 14 сообщений из 14, страница 1 из 1
10.01.2007, 11:26:57
    #34244985
^ozzy^
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что в данном классе пытается вызвать другой
Возникла, прямо скажем, специфичная задача.
К примеру - есть класс Class1 с методом setClassName.
Есть еще какой-то класс (допустим, мы не знаем какой, хотя узнать всегда можем, так что пусть будет Class2).
Нужно узнать, что _пытается_ вызвать к Class2 у класса Class1 (через механизм reflection).
Опять же, к примеру, Class2 пытается вызвать метод setSomeInteger, который не существует в классе Class1, но подавляет исключение. Нужно зафиксировать тот момент, когда Class2 пытается это сделать...
Что-то даже не знаю, с какой стороны к данной проблеме подойти.
...
Рейтинг: 0 / 0
10.01.2007, 12:11:09
    #34245162
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что в данном классе пытается вызвать другой
Странная задача и/или плохое объяснение.
Я понял так: C1 используется через рефлекшн в C2. Надо: трекать момент дерганья метода(ов) C1.
Надеюсь, вам это надо не для постоянного использования? т.е. не на продакшне, а для дебага и выявления еб****го кода?
Если да, то - подмена реализации C1, по другому никак.
...
Рейтинг: 0 / 0
10.01.2007, 12:16:25
    #34245182
^ozzy^
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что в данном классе пытается вызвать другой
TimmСтранная задача и/или плохое объяснение.
Я понял так: C1 используется через рефлекшн в C2. Надо: трекать момент дерганья метода(ов) C1.
Надеюсь, вам это надо не для постоянного использования? т.е. не на продакшне, а для дебага и выявления еб****го кода?
Если да, то - подмена реализации C1, по другому никак.

Да, конечно для дебага ))) На продакшен такое пускать нельзя :)
Суть в том, что C1 - собственноручно написанный, а у C2 реализация скрыта (конечно, jad никто не отменял, но он здесь не поможет).

Вообще - задача узнать, какой метод класса C1 _хочет_ вызвать класс C2 при условии что в C1 этот метод может отсутсвовать.
...
Рейтинг: 0 / 0
10.01.2007, 12:36:33
    #34245271
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что в данном классе пытается вызвать другой
^ozzy^ TimmСтранная задача и/или плохое объяснение.
Я понял так: C1 используется через рефлекшн в C2. Надо: трекать момент дерганья метода(ов) C1.
Надеюсь, вам это надо не для постоянного использования? т.е. не на продакшне, а для дебага и выявления еб****го кода?
Если да, то - подмена реализации C1, по другому никак.

Да, конечно для дебага ))) На продакшен такое пускать нельзя :)
Суть в том, что C1 - собственноручно написанный, а у C2 реализация скрыта (конечно, jad никто не отменял, но он здесь не поможет).

Вообще - задача узнать, какой метод класса C1 _хочет_ вызвать класс C2 при условии что в C1 этот метод может отсутсвовать.
Аа, понял. С2 подавляет NoSuchMethodException.
Ну тогда надо проксировать Class object для C1 в кастомном класслоадере после super.defineClass(...), если есть возможность подменить класслоадер в котором грузится C1.
В проксированном Class можно обрабатывать вызов get<...>Method(...) и что то делать (Thread#dumpStack(), например).
...
Рейтинг: 0 / 0
10.01.2007, 12:39:51
    #34245288
^ozzy^
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что в данном классе пытается вызвать другой
О, thnx, мысль понял... :) Опробуем на практике.
...
Рейтинг: 0 / 0
10.01.2007, 12:41:28
    #34245295
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что в данном классе пытается вызвать другой
^ozzy^О, thnx, мысль понял... :) Опробуем на практике.
Отпишитесь о результате, интересно :)
...
Рейтинг: 0 / 0
10.01.2007, 13:08:42
    #34245416
^ozzy^
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что в данном классе пытается вызвать другой
Рано я обрадовался ... classloader подменить не удастся - это web application.
Набрел на один интересный метод: Runtime.traceMethodCalls(boolean). В javadoc написано:

Код: plaintext
1.
2.
3.
4.
Enables/Disables tracing of method calls.  If  the  boolean  argument is true,  this  method suggests that the Java virtual machine emit debugging information  for  each method in the virtual machine as it is called. The format of  this  information, and the file or other output stream to which it is emitted, depends on the host environment. The virtual machine may ignore  this  request  if  it does not support  this  feature.

Calling  this  method with argument false suggests that the virtual machine cease emitting per-call debugging 
information.

Только у меня он напрочь отказывается работать...

Будем думать дальше )
...
Рейтинг: 0 / 0
10.01.2007, 13:38:17
    #34245524
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что в данном классе пытается вызвать другой
Мое предложение не прокатило бы и по другой более серьезной причине - java.lang.Class проксировать не получится, нет у него интерфейсов кроме Serializable.
Лучше, думаю, обратиться к разработчикам с просьбой пояснить ситуацию (вполне м.б. что проглатывание NoSuchMethodException не баг, а фича)
...
Рейтинг: 0 / 0
10.01.2007, 13:42:55
    #34245553
^ozzy^
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что в данном классе пытается вызвать другой
Разработчиков в команде уже давно нет и найти их не представляется возможным.
Думаю, что игра не стоит свеч (хотя из спортивного уже интереса постараюсь довести дело до конца) )
...
Рейтинг: 0 / 0
10.01.2007, 13:46:03
    #34245568
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что в данном классе пытается вызвать другой
почему jad не поможет?
...
Рейтинг: 0 / 0
10.01.2007, 14:48:29
    #34245866
^ozzy^
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что в данном классе пытается вызвать другой
zalexakaпочему jad не поможет?

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

Проблема на данный момент решена именно с его помощью. Универсальное средство на уровне размышлений.
...
Рейтинг: 0 / 0
10.01.2007, 15:06:39
    #34245937
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что в данном классе пытается вызвать другой
Код: plaintext
codeSupport.setPossibleWithoutHeadache(sources.isAvailable());
...
Рейтинг: 0 / 0
10.01.2007, 15:19:18
    #34245987
^ozzy^
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что в данном классе пытается вызвать другой
Можно пояснить, что Вы хотели сказать этой строкой кода ?
...
Рейтинг: 0 / 0
10.01.2007, 15:30:42
    #34246028
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что в данном классе пытается вызвать другой
Саппорт кода при отсутствии исходников и документации - настоящая головная боль
ЗЫ
Удачи и всего наилучшего.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Что в данном классе пытается вызвать другой / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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