Отключение обработчика исключений в фаре.

Столкнулись с проблемой в использовании Far? Здесь можно получить помощь.
Post Reply
kobri
Posts: 19
Joined: Fri 15 Nov, 2013 14:42
Been thanked: 1 time

Отключение обработчика исключений в фаре.

Post by kobri »

А можно сейчас как-то отключить в фаре всю обработку исключений? Раньше, помнится, для этого ключ коммандной строки был, но что-то не могу его найти.
User avatar
cmd.exe
Posts: 378
Joined: Fri 16 Apr, 2010 18:26
Location: Нижний Новгород
Has thanked: 181 times
Been thanked: 10 times
Contact:

Отключение обработчика исключений в фаре.

Post by cmd.exe »

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
kobri
Posts: 19
Joined: Fri 15 Nov, 2013 14:42
Been thanked: 1 time

Отключение обработчика исключений в фаре.

Post by kobri »

Имеется в виду этот плагин? http://plugring.farmanager.com/plugin.php?pid=671&l=ru
Если да то это не то, я хочу, чтобы фар исключения вообще не обрабатывал, а отдавал их системе. А то сейчас, когда в окне исключения жмешь "Отладка" - в отладчике вываливаешься где-то в недрах фара, непонятно где реальное исключение произошло. Приходится отладчик заранее к процессу цеплять, но это не удобно.
2useven10
Posts: 5226
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 314 times

Отключение обработчика исключений в фаре.

Post by 2useven10 »

Создать минидамп, потом открыть его в отладчике?
kobri
Posts: 19
Joined: Fri 15 Nov, 2013 14:42
Been thanked: 1 time

Отключение обработчика исключений в фаре.

Post by kobri »

Минидамп работает, но все равно не очень удобно. И потом исключения разные бывают, если память хорошенько подпорчена - не факт, что фар вообще сможет свое окно показать, тут лучше сразу упасть.
2useven10
Posts: 5226
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 314 times

Отключение обработчика исключений в фаре.

Post by 2useven10 »

kobri wrote: Минидамп работает, но все равно не очень удобно. И потом исключения разные бывают, если память хорошенько подпорчена - не факт, что фар вообще сможет свое окно показать, тут лучше сразу упасть.
Штатная сборка в любом случае неудобна для отладки. Мешают не только обработчики исключений но и оптимизация.
В _DEBUG сборке у себя я все обработчики убрал под #ifdef, но такой вариант для штатной сборки не годится (да и не нужен).
Imho, если Вас волнуют такие вопросы, значит сделать нужную сборку самостоятельно не составит труда.
kobri
Posts: 19
Joined: Fri 15 Nov, 2013 14:42
Been thanked: 1 time

Отключение обработчика исключений в фаре.

Post by kobri »

Раньше в штатной сборке был ключ /x, он как раз и делал то, что я хочу, но потом его зачем-то убрали. Если ключ чем-то мешает - дополнительный аргумент для build.bat тоже был бы неплохим вариантом, чтобы каждому не приходилось исходники править и потом их синхронизировать с изменениями в фаре. И хотелось бы этого не только для отладочной сборки, я вообще хочу такую сборку на постоянной основе у себя использовать, отладочная подтормаживать будет.
2useven10
Posts: 5226
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 314 times

Отключение обработчика исключений в фаре.

Post by 2useven10 »

Багтрекер работает. Добавьте хотелку про восстановление ключа /x.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Отключение обработчика исключений в фаре.

Post by DrKnS »

А лучше расскажите нам, чего вы хотите добиться.
kobri
Posts: 19
Joined: Fri 15 Nov, 2013 14:42
Been thanked: 1 time

Отключение обработчика исключений в фаре.

Post by kobri »

Хочу, в случае возникновения исключения, в JIT отладчике сразу попадать в то место кода, где оно возникло.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Отключение обработчика исключений в фаре.

Post by DrKnS »

Включу телепата и предположу, что пишете вы плагины и под исключениями понимаете SEH.
Если вы изначально запускаетесь под отладчиком, то всё уже перехватывается.
Если нет, то, начиная с 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;
}
- поэтому из фара отключение было убрано.
kobri
Posts: 19
Joined: Fri 15 Nov, 2013 14:42
Been thanked: 1 time

Отключение обработчика исключений в фаре.

Post by kobri »

За ссылку на Vectored Exceptions спасибо, интересная вещь. Но остается вопрос - как теперь приаттачить отладчик, чтобы он встал на месте исключения? И, если это возможно, надо бы тогда и сам фар такому научить, сейчас, когда жмешь "Отладка" в его стандартном окне исключения - в отладчике оказываешься где-то глубоко в недрах фара.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Отключение обработчика исключений в фаре.

Post by DrKnS »

как теперь приаттачить отладчик, чтобы он встал на месте исключения?
Если оставить в хандлере MessageBox, как в примере выше, то можно руками.
Если лень, то можно как-то .
Встанет не совсем на месте исключения, но оттуда до него один клик по стеку вызовов.
И, если это возможно, надо бы тогда и сам фар такому научить, сейчас, когда жмешь "Отладка" в его стандартном окне исключения - в отладчике оказываешься где-то глубоко в недрах фара.
Чтобы это работало, надо собрать Far c /EHsc вместо /EHa.
Сейчас SEH-исключения транслируются в стандартные и к моменту показа того диалога стек уже будет свёрнут, а контекст утерян.
kobri
Posts: 19
Joined: Fri 15 Nov, 2013 14:42
Been thanked: 1 time

Отключение обработчика исключений в фаре.

Post by kobri »

Спасибо, почти то, что нужно, а если убрать DebugBreak() и поставить EXCEPTION_CONTINUE_EXECUTION вместо EXCEPTION_CONTINUE_EXECUTION - оказываешься как раз на месте исключения.
kobri
Posts: 19
Joined: Fri 15 Nov, 2013 14:42
Been thanked: 1 time

Отключение обработчика исключений в фаре.

Post by kobri »

Хотя нет, поспешил немного. Проблемма в том, что таким способом ловятся first chance исключения, а их, как выяснилось, некоторые модули для своих целей используют. Так что хотелось бы всё-таки иметь возможность отключать обработчик исключений в фаре.
Post Reply

Return to “Нужна помощь”