Отладка COM под ASP
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 05.10.01 08:56
Оценка:
Извиняюсь аз повтор, однако при обсуждении в прошлый раз этой темы не были затронуты след. вопросы:

Почему при попытке отладки COM-объекта. созданного в модели Both ни при каких вариантах точка прерывания в коде не устанавливается, а в Apartment — устанавливается со свистом, и отладка происходит, как это описано в соответствующей статье в MSDN.

Условия: Win2k, VC++ 6.0 SP 5, IIS 5.0

Пока удается отлаживать только с помощью создания объекта-двойника в модели Apartment, и отлаживать. Очень неудобно. Буду очень признателен за помощь.
Алексей Кирдин
Re: Отладка COM под ASP
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.10.01 11:32
Оценка:
Здравствуйте Kaa, Вы писали:

Kaa>Извиняюсь аз повтор, однако при обсуждении в прошлый раз этой темы не были затронуты след. вопросы:


Kaa>Почему при попытке отладки COM-объекта. созданного в модели Both ни при каких вариантах точка прерывания в коде не устанавливается, а в Apartment — устанавливается со свистом, и отладка происходит, как это описано в соответствующей статье в MSDN.


Kaa>Условия: Win2k, VC++ 6.0 SP 5, IIS 5.0


Kaa>Пока удается отлаживать только с помощью создания объекта-двойника в модели Apartment, и отлаживать. Очень неудобно. Буду очень признателен за помощь.



Вообще-то должно работать, но если уж совсем не получается всегда можно в код ASSERT или int 3; влепить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Отладка COM под ASP
От: kaa Украина http://blog.meta.ua/users/kaa/
Дата: 05.10.01 12:43
Оценка:
Здравствуйте VladD2, Вы писали:

>Вообще-то должно работать, но если уж совсем не получается всегда можно в код ASSERT или int 3; влепить.


При вставке _ASSERT( 0 ) никаких шевелений не происходит:
Вызов метода объекта никогда не завершается, отладчик никак не реагирует.
Алексей Кирдин
Re[3]: Отладка COM под ASP
От: Аноним  
Дата: 05.10.01 15:32
Оценка:
Здравствуйте kaa, Вы писали:

kaa>Здравствуйте VladD2, Вы писали:


>>Вообще-то должно работать, но если уж совсем не получается всегда можно в код ASSERT или int 3; влепить.


kaa>При вставке _ASSERT( 0 ) никаких шевелений не происходит:

kaa>Вызов метода объекта никогда не завершается, отладчик никак не реагирует.

Похоже следующая ситуация:
Объект с Apartment поднимается в IIS In-Process COM+ app, который запускается под Interactive User, то есть ты и брейкпоинт поставишь и мессаджбокс от ассершина увидишь.
А объект с Both стартует в IIS Out of proccess COM+ app, у которого по дефолту свой юзер (не помню точно — по-моему, IWAM_имямашины) —
следовательно мессадж бокс от ассершина ты уж точно не увидишь и метод с ассершином будет длится вечно в ожидании, пока IWAM_имямашины не нажмет кнопку в мессадж боксе... :)

Короче, попробуй поставить у IIS Out of proccess COM+ app Identity тоже Interactive User
Re[4]: Отладка COM под ASP
От: IT Россия linq2db.com
Дата: 06.10.01 02:56
Оценка:
Здравствуйте Аноним, Вы писали:

А>Похоже следующая ситуация:


Люблю толковые ответы, не люблю ананимов ;o) Хотя, конечно, это личное дело каждого.
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: Отладка COM под ASP
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 06.10.01 10:12
Оценка:
Здравствуйте Аноним, Вы писали:

А>Короче, попробуй поставить у IIS Out of proccess COM+ app Identity тоже Interactive User


Поставил. Эффект следующий: присоединяюсь к соответствующему dllhost.exe отладчиком, и вижу следующее: в методах самого COM-объекта он мне по-прежнему не дает ставить точки прерывания, а вот в текстах библиотеки (статически прилинкованной) точки ставятся, и в них он останавливается. Это уже положительный эффект, но вся синхронизация у меня в самом COM-объекте, поэтому хотелось бы и до него добраться. Пока это не удалось.

Кстати, поменять обратно пользователя с Interactive User на IWAM_имямашины не удается, т.к. нет такого пользователя. Где его взять? Хочется попробовать ставить точки там, где они ставятся теперь, и до текущего изменения.
Алексей Кирдин
Re[4]: Отладка COM под ASP
От: Lexey Россия  
Дата: 08.10.01 08:54
Оценка:
Здравствуйте Аноним, Вы писали:

А>Похоже следующая ситуация:

А>Объект с Apartment поднимается в IIS In-Process COM+ app, который запускается под Interactive User, то есть ты и брейкпоинт поставишь и мессаджбокс от ассершина увидишь.
А>А объект с Both стартует в IIS Out of proccess COM+ app, у которого по дефолту свой юзер (не помню точно — по-моему, IWAM_имямашины) —
А>следовательно мессадж бокс от ассершина ты уж точно не увидишь и метод с ассершином будет длится вечно в ожидании, пока IWAM_имямашины не нажмет кнопку в мессадж боксе... :)

Чушь какая-то. Объект в ASP (если он не принадлежит отдельному COM+ серверному приложению) всегда создается в том же контексте, в котором работает веб-приложение (будь-то in-proc, pooled или isolated).

Для pooled существует всего один COM+ пул для всех приложений, для isolated создается отдельное COM+-приложение. По умолчанию они все работают под IWAM_MACHINENAME (и никогда под interactive user).

А>Короче, попробуй поставить у IIS Out of proccess COM+ app Identity тоже Interactive User


Самый простой способ — поставить веб приложение в In-Proc и отлаживать сам сервис inetinfo. Еще ни разу не видел, чтобы это не срабатывало.
Самый крайний случай — поставить SoftIce и отлаживать им.
Re[5]: Отладка COM под ASP
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 12.10.01 06:59
Оценка:
Здравствуйте Lexey, Вы писали:

L>Здравствуйте Аноним, Вы писали:


L>Самый простой способ — поставить веб приложение в In-Proc и отлаживать сам сервис inetinfo. Еще ни разу не видел, чтобы это не срабатывало.


Это тоже не удается. Точки прерывания не ставятся, все точно как в предыдущем описании, только что процесс другой. Да и в прилинкованных библиотеках точки ставиться перестали. Непонятная ситуация, короче.
Алексей Кирдин
Re[6]: Отладка COM под ASP
От: Lexey Россия  
Дата: 12.10.01 07:04
Оценка:
Здравствуйте Kaa, Вы писали:

Kaa>Здравствуйте Lexey, Вы писали:


L>>Здравствуйте Аноним, Вы писали:


L>>Самый простой способ — поставить веб приложение в In-Proc и отлаживать сам сервис inetinfo. Еще ни разу не видел, чтобы это не срабатывало.


Kaa>Это тоже не удается. Точки прерывания не ставятся, все точно как в предыдущем описании, только что процесс другой. Да и в прилинкованных библиотеках точки ставиться перестали. Непонятная ситуация, короче.


Как отлаживаешь-то?
По шагам:
1) Attach to process... inetinfo
2) В Project->Settings->Debug->Additioal DLLs добавляешь все свои библиотеки.
3) Открываешь исходники (не Open workspace, а Open File для каждого исходника).
4) Ставишь точки останова.
5) Отлаживаешься.
Re[7]: Отладка COM под ASP
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 12.10.01 07:18
Оценка:
Здравствуйте Lexey, Вы писали:
L>Как отлаживаешь-то?
L>5) Отлаживаешься.

— До этого пункта все как по нотам ;-)) А дальше все не как у людей. Я тут всех знакомых уже задолбал этим вопросом, но никто еще на наших (у нас на 3-х компах та же ситуация) выполнить ЭТО не сумел еще ;-)) Хотя VS у нас лицензионный со всеми сервиспаками (SP 5) и Platform SDK. Одним словом — чудеса.
Алексей Кирдин
Re[7]: Отладка COM под ASP
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 12.10.01 07:39
Оценка:
Здравствуйте Lexey, Вы писали:

Не, соврал, в библиотеках точки ставятся. А в самомо COM-объекте — нет.
Алексей Кирдин
Re[8]: Отладка COM под ASP
От: Lexey Россия  
Дата: 12.10.01 08:09
Оценка:
Здравствуйте Kaa, Вы писали:

Kaa>Здравствуйте Lexey, Вы писали:


Kaa>Не, соврал, в библиотеках точки ставятся. А в самомо COM-объекте — нет.


Гхм, а сам COM-объект у тебя что — не в DLL?
Re[9]: Отладка COM под ASP
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 12.10.01 08:45
Оценка:
Здравствуйте Lexey, Вы писали:
L>Гхм, а сам COM-объект у тебя что — не в DLL?

Возможно я неправильно выразился. Объясню ситуацию:
Объект представляет из себя оболочку для некоторого движка, вся логика которого находится в статически прилинкованной либе. В исходниках этой либы точки прерывания ставятся со свистом.

Сам COM-объект — я подразумевал код методов C++-класса, реализующего COM-интерфейс, экземпляр которого создается при запросе интерфейса клиентом. Код этого класса содержится в 2-х определенных файлах: ...h и ...cpp. Так вот, в этих 2-х файлах точки прерывания не ставятся.

Вот что я имел в виду. Надеюсь, прояснил.
Алексей Кирдин
Re[10]: Отладка COM под ASP
От: Lexey Россия  
Дата: 12.10.01 09:00
Оценка:
Здравствуйте Kaa, Вы писали:

Kaa>Здравствуйте Lexey, Вы писали:

L>>Гхм, а сам COM-объект у тебя что — не в DLL?

Kaa>Возможно я неправильно выразился. Объясню ситуацию:

Kaa>Объект представляет из себя оболочку для некоторого движка, вся логика которого находится в статически прилинкованной либе. В исходниках этой либы точки прерывания ставятся со свистом.

Kaa>Сам COM-объект — я подразумевал код методов C++-класса, реализующего COM-интерфейс, экземпляр которого создается при запросе интерфейса клиентом. Код этого класса содержится в 2-х определенных файлах: ...h и ...cpp. Так вот, в этих 2-х файлах точки прерывания не ставятся.


Kaa>Вот что я имел в виду. Надеюсь, прояснил.


Угу. Тогда действительно чудеса, да и только. 8-( ).
Знаешь что, попробуй еще int3 жестко в код включить.
Что-то типа:
#if defined(_DEBUG)
  _asm int 3;
#endif
в нужном месте.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.