|
|
|
Что в данном классе пытается вызвать другой
|
|||
|---|---|---|---|
|
#18+
Возникла, прямо скажем, специфичная задача. К примеру - есть класс Class1 с методом setClassName. Есть еще какой-то класс (допустим, мы не знаем какой, хотя узнать всегда можем, так что пусть будет Class2). Нужно узнать, что _пытается_ вызвать к Class2 у класса Class1 (через механизм reflection). Опять же, к примеру, Class2 пытается вызвать метод setSomeInteger, который не существует в классе Class1, но подавляет исключение. Нужно зафиксировать тот момент, когда Class2 пытается это сделать... Что-то даже не знаю, с какой стороны к данной проблеме подойти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 11:26:57 |
|
||
|
Что в данном классе пытается вызвать другой
|
|||
|---|---|---|---|
|
#18+
Странная задача и/или плохое объяснение. Я понял так: C1 используется через рефлекшн в C2. Надо: трекать момент дерганья метода(ов) C1. Надеюсь, вам это надо не для постоянного использования? т.е. не на продакшне, а для дебага и выявления еб****го кода? Если да, то - подмена реализации C1, по другому никак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 12:11:09 |
|
||
|
Что в данном классе пытается вызвать другой
|
|||
|---|---|---|---|
|
#18+
TimmСтранная задача и/или плохое объяснение. Я понял так: C1 используется через рефлекшн в C2. Надо: трекать момент дерганья метода(ов) C1. Надеюсь, вам это надо не для постоянного использования? т.е. не на продакшне, а для дебага и выявления еб****го кода? Если да, то - подмена реализации C1, по другому никак. Да, конечно для дебага ))) На продакшен такое пускать нельзя :) Суть в том, что C1 - собственноручно написанный, а у C2 реализация скрыта (конечно, jad никто не отменял, но он здесь не поможет). Вообще - задача узнать, какой метод класса C1 _хочет_ вызвать класс C2 при условии что в C1 этот метод может отсутсвовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 12:16:25 |
|
||
|
Что в данном классе пытается вызвать другой
|
|||
|---|---|---|---|
|
#18+
^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(), например). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 12:36:33 |
|
||
|
Что в данном классе пытается вызвать другой
|
|||
|---|---|---|---|
|
#18+
О, thnx, мысль понял... :) Опробуем на практике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 12:39:51 |
|
||
|
Что в данном классе пытается вызвать другой
|
|||
|---|---|---|---|
|
#18+
^ozzy^О, thnx, мысль понял... :) Опробуем на практике. Отпишитесь о результате, интересно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 12:41:28 |
|
||
|
Что в данном классе пытается вызвать другой
|
|||
|---|---|---|---|
|
#18+
Рано я обрадовался ... classloader подменить не удастся - это web application. Набрел на один интересный метод: Runtime.traceMethodCalls(boolean). В javadoc написано: Код: plaintext 1. 2. 3. 4. Только у меня он напрочь отказывается работать... Будем думать дальше ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 13:08:42 |
|
||
|
Что в данном классе пытается вызвать другой
|
|||
|---|---|---|---|
|
#18+
Мое предложение не прокатило бы и по другой более серьезной причине - java.lang.Class проксировать не получится, нет у него интерфейсов кроме Serializable. Лучше, думаю, обратиться к разработчикам с просьбой пояснить ситуацию (вполне м.б. что проглатывание NoSuchMethodException не баг, а фича) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 13:38:17 |
|
||
|
Что в данном классе пытается вызвать другой
|
|||
|---|---|---|---|
|
#18+
Разработчиков в команде уже давно нет и найти их не представляется возможным. Думаю, что игра не стоит свеч (хотя из спортивного уже интереса постараюсь довести дело до конца) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 13:42:55 |
|
||
|
Что в данном классе пытается вызвать другой
|
|||
|---|---|---|---|
|
#18+
почему jad не поможет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 13:46:03 |
|
||
|
Что в данном классе пытается вызвать другой
|
|||
|---|---|---|---|
|
#18+
zalexakaпочему jad не поможет? Он помочь может единожды, а хотелось бы для повседневного использования, потому как задача может повториться (и повторится). Проблема на данный момент решена именно с его помощью. Универсальное средство на уровне размышлений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 14:48:29 |
|
||
|
Что в данном классе пытается вызвать другой
|
|||
|---|---|---|---|
|
#18+
Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 15:06:39 |
|
||
|
Что в данном классе пытается вызвать другой
|
|||
|---|---|---|---|
|
#18+
Можно пояснить, что Вы хотели сказать этой строкой кода ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2007, 15:19:18 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34245987&tid=2147011]: |
0ms |
get settings: |
15ms |
get forum list: |
21ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
45ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
| others: | 276ms |
| total: | 459ms |

| 0 / 0 |
