Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Extended Stored Procedure, проблемы / 4 сообщений из 4, страница 1 из 1
04.01.2002, 14:19
    #32020194
Alexey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Extended Stored Procedure, проблемы
Написал xp, так мало того, что ее отлаживать невозможно, она не выгружается из памяти DBCC xp_perf (FREE) не работает, подменить DLL невозможно, только через рестарт сервера. Если произошел except в DLL в момент работы (отлаживаем !), то повторно xp не стартует, тупит ровно минуту и вываливается без сообщений. Просто подлости со всех сторон !
Кто имеет опыт написания и отладки xp, что скажут ?
...
Рейтинг: 0 / 0
04.01.2002, 14:42
    #32020198
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Extended Stored Procedure, проблемы
1. Выгрузка из памяти: DBCC dllname (FREE).
2. Отладка. BOL->Contents->Building SQL Server Applications->Extended Stored Procedure Programming->Programming Extended Stored Procedures->Debugging an Extended Stored Procedure. Работает на ура.
3. С exception'ами у меня работа построена следующим образом: вызов каждого самого верхнего метода (то есть тот, который зовется из сиквела) обвернут try catch, причем намертво, в конце есть catch(...). Все ошибки, которые происходят, надо вернуть сиквелу в понятном ему виде. Для этого есть функция srv_sendmsg. Она используется для посылки как информационных сообщений, так и ошибок.
...
Рейтинг: 0 / 0
04.01.2002, 15:19
    #32020201
Alexey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Extended Stored Procedure, проблемы
Поднимать сервер для отладки я не могу в принципе, поэтому, то, что советуется в BOL, применить не могу, а вот про Try|catch не понял, какой метод вызывается из сервера ?
Сервер проецирует DLL на себя, у DLL точка входа, через которую сервер вызывает функции DLL, там мы что-то пишем, связь обеспечивается библиотекой ODS, и если есть вызов srv_setcoldata (например), то он использует ODS Gateway, если malloc, то stdlib.lib .....
Так у меня засада в том, что except на CreatePipe происходит, я его ловлю по RETCODE, все путем , но после этого xp уже не работает до рестарта сервера.
...
Рейтинг: 0 / 0
08.01.2002, 09:09
    #32020281
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Extended Stored Procedure, проблемы
>Поднимать сервер для отладки я не могу в принципе, поэтому, то, что советуется в BOL, применить не могу
Фигово, что еще сказать. Если у вас вся разработка и отладка ведется на рабочей базе, то это ваши проблемы. Мне советы BOL вполне помогли.

Про try catch. Внутри extended stored proc ты можешь вызывать еще кучу функций, делать кучу потенциально опасных действий и проч. Кидайся исключениями, вообще делай все, что хочешь, только на самом верхнем уровне поймай все и переведи в понятную сиквелу форму. Пример:

SRVRETCODE xp_hello(SRV_PROC* pSrvProc)
{
try
{
// ...
}
// всякие типизированные catch'и, чтобы посылать осмысленное сообщение об ошибке
catch(...)
{
MySendError(); // на крайний случай посылать сообщение о непонятной ошибке типа "Error occured"
return(XP_ERROR);
}

return (XP_NOERROR);
}

В MySendError нужно формировать мессагу и посылать ее серверу через srv_sendmsg. Насколько я помню, никаких фатальных ошибок при таком способе написания не происходило. Рестарт сервера не нужен был.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Extended Stored Procedure, проблемы / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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