Обработка ошибок

  • Автор темы Автор темы Akupaka
  • Дата начала Дата начала
как в клиенте узнать имя модуля с помощью функций Getthreadinfo или Lsi_info — буду премного благодарен (и, видимо, не я один).
вот и я не знаю, как в клиенте это делаеца. когда-то пытался решать эту задачу, пошарил ibm-ский форум, ничего внятного не нашел, забил. поэтому и указал, что module_name передаю обработчику явно.
 
Lsi_info в одном из параметров возвращает (14?), но на сервере (раньше, щас не знаю) возвращалось не корректное имя либы, а какой-то код.
А "он есть - но всегда" означает, что значение имени модуля необходимо передавать из места вызова обработчика, т.к. в самой процедуре обработчика можно получить лишь имя модуля, в котором именно она находится, а не там где произошла ошибка.
GetThreadInfo(LSI_THREAD_CALLMODULE) — Get the name of the calling module. Это должно (теоретически) возвращать имя модуля, откуда был произведён вызов текущей процедуры/функции. Применительно к функции-обработчику ошибок — имя модуля, в котором возникла ошибка. Если бы ещё возвращалось действительно имя модуля, а не абра-кадабра :). Для Lsi_info есть аналогичный параметр с аналогичным результатом. Никто не в курсе, как расшифоровать?

Добавлено:
на клиенте нормальные! а на сервере код!
В каком клиенте? У меня 8-ка возвращает абра-кадабру.
 
на клиенте нормальные! а на сервере код!
Беру свои слова обратно :) Че-то запамятствовал я... Только что в сомнениях перепроверил, и таки да! ))

Кстати, врядли его можно перевести, это скорее какая-то область в памяти. Оно разное.
 
сначала человек спрашивает, как получить первые три символа в строке:, а потом вставляет пример кода. код явно чужой, копирайтов нет, вопщем неаккуратненько как-то. желание порисоваца понятно, но надо же совесть иметь...
P.S. Про ctrl+c - спасибо, не знал. Как говорица, "о сколько нам открытий чудных..."
... у меня желание обсудить способы обработки ошибок, а желание порисоваца у кого то другого (молчу...)
п.с. как получить первые три символа в строке... "о сколько нам открытий чудных..." (с) не я
 
... у меня желание обсудить способы обработки ошибок, а желание порисоваца у кого то другого (молчу...)
п.с. как получить первые три символа в строке... "о сколько нам открытий чудных..." (с) не я
Вы по делу ответьте. Код привели - будьте готовы ответить на вопросы. Вопросы задал тут: link removed
 
Господа-товарищи, будьте любезны ответить мне на один вопросик.
Ситуация такая. Пользую я для обработки в основном везде и всегда конструкцию типа:
Код:
Sub Initialize
On Error GoTo ErrorMsg
<.................................................................>
Exit Sub
ErrorMsg:
'Тута отправляю админам приложения диагностическое письмишко 
Exit Sub
End Sub
Вылезла у меня в одном месте ошибка (пусть это будет строка 666 и ошибка 666), природа которой мне известна и которую мне всё же хотелось бы пропустить, просто выслав диагностическое письмишко админам, а не вываливаться в ErrorMsg: с его Exit Sub.
Написал я следующее:
Код:
Sub Initialize
On Error GoTo ErrorMsg
<.................................................................>
On Error 666 Resume Next
<строка 666>
if Err = 666 Then
'Тута отправляю админам приложения диагностическое письмишко 666
End If
On Error GoTo ErrorMsg
<.................................................................>
Exit Sub
ErrorMsg:
'Тута отправляю админам приложения диагностическое письмишко
Exit Sub
End Sub
Потестил, вроде желаемый эффект был достигнут.
Вот решил проконсультироваться не очень ли это пахнущий говнокод у меня вышел и имеет ли он право на существование. :)
 
Можно было бы проще:
Код:
Sub Initialize
On Error GoTo ErrorMsg
<.................................................................>
<строка 666>
<.................................................................>
Exit Sub
ErrorMsg:
'Тута отправляю админам приложения диагностическое письмишко
if Err = 666 Then Resume Next
Exit Sub
End Sub
 
Код:
Sub Initialize
On Error GoTo ErrorMsg
<.................................................................>
Exit Sub


ErrorMsg:
'Тута отправляю админам приложения диагностическое письмишко 
if Err= 666 and Erl = 666 then
'Тута отправляю админам приложения диагностическое письмишко 666
err = 0
Resume Next
else
'Тута отправляю админам приложения диагностическое письмишко и вываливаю абшибку
msgbox "Alert"
end if
Exit Sub
End Sub
 
О, а про Erl я как-то и не подумал. Спасибо!
Правда тут главное не забыть про это Erl, когда буду править код и номер строки измениться...
Добавлено: Где-то встречал, что использование err = 0 глюковато.
А зачем вообще ее сбрасывать?
 
О, а про Erl я как-то и не подумал. Спасибо!
Правда тут главное не забыть про это Erl, когда буду править код и номер строки измениться...
не, на самом деле Erl то как раз лучше и не юзать ( если только на 100% уверенны что код никогда не будет меняться )

я его привёл для наглядности
 
Можно было бы проще:
...
Обычно использую такую конструкцию
Код:
Sub Initialize
On Error GoTo ErrorMsg
'...
ExitSub:
Exit Sub
ErrorMsg:
'...
Resume ExitSub
End Sub

Есть подозрение, что без Resume ошибка не сбрасывается. Возможно, я ошибаюсь.
 
А я и не заметил, что #51 и #52 сообщения от разных людей. :)
Medevic, и Вам спасибо! Если ошибка может вылезть только в одном месте, то Ваш вариант -- это да, а если в нескольких, но пропустить надо только в одном, то, по-видимому, нет...
 
Если ошибка может вылезть только в одном месте, то Ваш вариант -- это да, а если в нескольких, но пропустить надо только в одном, то, по-видимому, нет...
Можно и так извратиться:
Код:
Sub Initialize
On Error GoTo ErrorMsg
<.................................................................>
On Error 666 GoTo Error666
<строка 666>
On Error GoTo ErrorMsg
<.................................................................>
ExitSub:
Exit Sub
Error666:
'Тута отправляю админам приложения диагностическое письмишко
On Error GoTo ErrorMsg 'для переключения обработчика на других строках
Resume Next
ErrorMsg:
'Тута отправляю админам приложения диагностическое письмишко
Resume ExitSub
End Sub
 
Morpheus, может быть и может, у меня всё в одном (просто подумывал замахнуться на некую универсальность). По основному вопросу смысл ясен.
Теперь по дополнительному: так а зачем всё же после обработки сбрасывать ошибку в 0. Как я понимаю, при выходе из процедуры или при новой ошибке она сама сбросится. Или не так?
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы