Перерыв только на управляемых исключениях [дубликат]

Конечно, есть много таких подходов, как синхронный запрос, обещание, но из моего опыта я думаю, что вы должны использовать подход обратного вызова. Естественно, что асинхронное поведение Javascript. Итак, ваш фрагмент кода можно переписать немного иначе:

function foo() {
    var result;

    $.ajax({
        url: '...',
        success: function(response) {
            myCallback(response);
        }
    });

    return result;
}

function myCallback(response) {
    // Does something.
}
8
задан AnArrayOfFunctions 3 February 2015 в 19:37
поделиться

3 ответа

Это немного неудобно делать для всех типов исключений сразу

.foreach(exc {sx}) {.catch{sxd ${exc}}}

Что он делает:

  • {sx}: список всех типов исключений (и текущие настройки, которые вам на самом деле не нужны)
  • exc: назначить переменную
  • .foreach(...) {...}: разрезать ее на куски отдельных слов и выполнить команду
  • sxd ${exc}: отключить все, что находится в переменной exc
  • .catch{...}: игнорировать все сообщения об ошибках, которые поступают из информации настроек

Преимущество вышеупомянутого подхода заключается в том, что он является независимым от версии WinDbg. Если введены новые коды исключений, он все равно будет работать.

Обработку нежелательного текста можно избежать с помощью PyKd . Сохраните следующий сценарий в файле sdx.py и запустите !py sxd.py:

from pykd import *

sx = dbgCommand("sx")
for s in sx.splitlines():
    ex = s[:4]
    if  not ex=="" or ex.isspace():
        print("sxd "+ex)
        dbgCommand("sxd "+ex)

Другой параметр обрабатывает все исключения вручную:

.foreach(exc {.echo "ct et cpr epr ld ud ser ibp iml out av asrt aph bpe bpec eh clr clrn cce cc dm dbce gp ii ip dz iov ch hc lsq isc 3c svh sse ssec sbo sov vs vcpp wkd rto rtt wob wos *"}) {.catch{sxd ${exc}}}

Однако, если есть новые коды исключений в WinDbg, вы должны добавить их в команду .echo.

10
ответ дан Thomas Weller 27 August 2018 в 03:53
поделиться

Вы можете дополнительно управлять этим из WinDbg GUI 'Debug> Фильтры событий ...', это откроет диалоговое окно следующим образом:

enter image description here [/g1]

Здесь вы можете указать, как WinDbg обрабатывает каждый тип исключения и должен ли он быть включен, отключен, выводиться на вывод консоли WinDbg или проигнорирован, а затем в событии, запускающем ли WinDbg или ваше приложение.

Поэтому в вашем случае вы можете выбрать «Игнорировать» и «Не обрабатывать» там страницу MSDN, которая объясняет немного больше: https://msdn.microsoft.com/en-us/library/windows/hardware/ff541752 ( v = vs.85) .aspx

3
ответ дан EdChum 27 August 2018 в 03:53
поделиться

В Windbg семейство команд sx используется для управления обработкой исключений.

Для передачи исключения непосредственно в приложение используйте команду sxd, которая отключает конкретное исключение. (Фактически отключить среднее игнорирование исключения первого шанса) Насколько я знаю, вы должны использовать sxd для всех конкретных исключений, потому что sxd * означает все исключения, которые иначе не обозначены явно.

Используйте команду sx, чтобы увидеть доступные исключения и текущие настройки. И используйте sxd для всего, что вы хотите отключить.

 0:000> sx
   ct - Create thread - ignore
   et - Exit thread - ignore
  cpr - Create process - ignore
 <cut> 
   av - Access violation - break - not handled

 0:000> sxd av
 0:000> sx
 ct - Create thread - ignore
 et - Exit thread - ignore
 <cut> 
 av - Access violation - second-chance break - not handled

Результат, на мой взгляд, трудно интерпретировать; av (нарушение прав доступа) теперь не будет обрабатываться отладчиком каким-либо видимым образом.

В разделе «Управление исключениями и событиями» в справочной системе объясняется первая вероятность и вторая вероятность.

4
ответ дан Kjell Gunnar 27 August 2018 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: