Отключение обработчика исключений в фаре.
Отключение обработчика исключений в фаре.
А можно сейчас как-то отключить в фаре всю обработку исключений? Раньше, помнится, для этого ключ коммандной строки был, но что-то не могу его найти.
- cmd.exe
- Posts: 378
- Joined: Fri 16 Apr, 2010 18:26
- Location: Нижний Новгород
- Has thanked: 181 times
- Been thanked: 10 times
- Contact:
Отключение обработчика исключений в фаре.
Far Exception hendler вроде за трапы отвечает у x86?
I've been using Vim for about 2 years now, mostly because I can't figure out how to exit it. (c) I Am Devloper
I know nothing except the fact of my ignorance. (с) Socrates
I know nothing except the fact of my ignorance. (с) Socrates
Отключение обработчика исключений в фаре.
Имеется в виду этот плагин? http://plugring.farmanager.com/plugin.php?pid=671&l=ru
Если да то это не то, я хочу, чтобы фар исключения вообще не обрабатывал, а отдавал их системе. А то сейчас, когда в окне исключения жмешь "Отладка" - в отладчике вываливаешься где-то в недрах фара, непонятно где реальное исключение произошло. Приходится отладчик заранее к процессу цеплять, но это не удобно.
Если да то это не то, я хочу, чтобы фар исключения вообще не обрабатывал, а отдавал их системе. А то сейчас, когда в окне исключения жмешь "Отладка" - в отладчике вываливаешься где-то в недрах фара, непонятно где реальное исключение произошло. Приходится отладчик заранее к процессу цеплять, но это не удобно.
Отключение обработчика исключений в фаре.
Минидамп работает, но все равно не очень удобно. И потом исключения разные бывают, если память хорошенько подпорчена - не факт, что фар вообще сможет свое окно показать, тут лучше сразу упасть.
Отключение обработчика исключений в фаре.
Штатная сборка в любом случае неудобна для отладки. Мешают не только обработчики исключений но и оптимизация.
В _DEBUG сборке у себя я все обработчики убрал под #ifdef, но такой вариант для штатной сборки не годится (да и не нужен).
Imho, если Вас волнуют такие вопросы, значит сделать нужную сборку самостоятельно не составит труда.
Отключение обработчика исключений в фаре.
Раньше в штатной сборке был ключ /x, он как раз и делал то, что я хочу, но потом его зачем-то убрали. Если ключ чем-то мешает - дополнительный аргумент для build.bat тоже был бы неплохим вариантом, чтобы каждому не приходилось исходники править и потом их синхронизировать с изменениями в фаре. И хотелось бы этого не только для отладочной сборки, я вообще хочу такую сборку на постоянной основе у себя использовать, отладочная подтормаживать будет.
Отключение обработчика исключений в фаре.
Хочу, в случае возникновения исключения, в JIT отладчике сразу попадать в то место кода, где оно возникло.
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Отключение обработчика исключений в фаре.
Включу телепата и предположу, что пишете вы плагины и под исключениями понимаете SEH.
Если вы изначально запускаетесь под отладчиком, то всё уже перехватывается.
Если нет, то, начиная с Windows XP, это решается в несколько строк прямо в плагине:
- поэтому из фара отключение было убрано.
Если вы изначально запускаетесь под отладчиком, то всё уже перехватывается.
Если нет, то, начиная с Windows XP, это решается в несколько строк прямо в плагине:
Code: Select all
class veh_monitor
{
public:
// Start monitoring
veh_monitor(): m_Handler(AddVectoredExceptionHandler(TRUE, &veh_monitor::handler)) {}
// Stop monitoring - you're not looking for all exceptions in the whole process
~veh_monitor() { RemoveVectoredExceptionHandler(m_Handler); }
static LONG WINAPI handler(EXCEPTION_POINTERS*)
{
// Attach the debugger, write a dump, whatever
MessageBox(0, L"Uh-oh", L"Caught exception", MB_ICONERROR);
return EXCEPTION_CONTINUE_SEARCH;
}
private:
void* m_Handler;
};
HANDLE WINAPI OpenW(const struct OpenInfo *OInfo)
{
veh_monitor Monitor;
int a = 0;
// Action!
int b = 1 / a;
}
Отключение обработчика исключений в фаре.
За ссылку на Vectored Exceptions спасибо, интересная вещь. Но остается вопрос - как теперь приаттачить отладчик, чтобы он встал на месте исключения? И, если это возможно, надо бы тогда и сам фар такому научить, сейчас, когда жмешь "Отладка" в его стандартном окне исключения - в отладчике оказываешься где-то глубоко в недрах фара.
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Отключение обработчика исключений в фаре.
Если оставить в хандлере MessageBox, как в примере выше, то можно руками.как теперь приаттачить отладчик, чтобы он встал на месте исключения?
Если лень, то можно как-то .
Встанет не совсем на месте исключения, но оттуда до него один клик по стеку вызовов.
Чтобы это работало, надо собрать Far c /EHsc вместо /EHa.И, если это возможно, надо бы тогда и сам фар такому научить, сейчас, когда жмешь "Отладка" в его стандартном окне исключения - в отладчике оказываешься где-то глубоко в недрах фара.
Сейчас SEH-исключения транслируются в стандартные и к моменту показа того диалога стек уже будет свёрнут, а контекст утерян.
Отключение обработчика исключений в фаре.
Спасибо, почти то, что нужно, а если убрать DebugBreak() и поставить EXCEPTION_CONTINUE_EXECUTION вместо EXCEPTION_CONTINUE_EXECUTION - оказываешься как раз на месте исключения.
Отключение обработчика исключений в фаре.
Хотя нет, поспешил немного. Проблемма в том, что таким способом ловятся first chance исключения, а их, как выяснилось, некоторые модули для своих целей используют. Так что хотелось бы всё-таки иметь возможность отключать обработчик исключений в фаре.