Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2018, 18:44   #1
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию Проблема с отладкой

Здравствуйте.
У меня IDE MS Visual Studio 2013 Ultimate (лицензионная), на Windwos 7 SP1 x64 (ломаной =) ). Пользуюсь студией с переменным успехом с 2013 года.

Сразу проблема: отладчик не ловит исключения, без отладчика из программы исключения падают.

Дальше подробное описание с примерами.

Где то год назад начал замечать следующую картину:
программа, запущенная без отладки (файлом или Ctrl+F5) выдаёт какую то ошибку; устанавливаю "закономерность" её проявления, иду в отладку;
в отладке программа выполняет код с каким то дефектом, но исключение не выпадает.
В качестве дефекта самый яркий пример - не удалось получить доступ к картинке, ибо занята другим процессом (в моём случае - другим потоком), в итоге объект как бы есть, но вместо изображения я получаю туда ErrorImage, и продолжается выполнение во что бы то ни стало.

Раньше меня это не сильно смущало, так как потоки можно было синхронизоровать, и при помощи трассировки узнать, в каком именно участке кода ошибка.
Сейчас у меня объекты не должны зависеть друг от друга, или от каких то внешних данных среды; когда я обнаружил проявления "В данный момент объект используется другим процессом" - прописал клонирование всех внешних данных, а там где клонировать нельзя - там воткнул lock.
Ошибок стало меньше. но где то всё таки пропустил, то ли клонирование, то ли lock.
(Язык C#).

Как побороть проблему с отладчиком ?
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 22.03.2018 в 18:52.
OmegaBerkut вне форума Ответить с цитированием
Старый 23.03.2018, 15:50   #2
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

С самим отладчиком вроде как разобрался. Теперь начал сыпать те исключения, которые раньше игнорил.
Но моя проблема всё равно осталась, и отладчик всё равно не ловит исключение с выше описанными следствиями. Теперь мне кажется это происходит потому что ошибка выпадает за пределами пользовательского кода. Здесь видна трассировка в тексте исключения. Нет ни одной моей функции.
Эта ошибка проявляется случайным образом, но так как все общие ресурсы были расклонированы (проверил, нигде не упустил ни клонирования, ни lock), и объекты используют исключительно свои экземпляры необходимых объектов. У меня есть два варианта:
1 - выполнение потока может накладываться само на себя; как это возможно - ума не приложу, поток экземпляра стартует единожды в конструкторе класса;
2 - действительно ошибка НЕ в моём коде, но в это не очень верится. И не очень хочется верить.

Что делать - разумеется не имею представления. Пошёл перепиливать конструкцию.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 23.03.2018, 16:13   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
без отладчика из программы исключения падают
Дык выведите StackTrace куда-нибудь (просто .ToString()).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 23.03.2018, 16:39   #4
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Alex11223
Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Здесь видна трассировка в тексте исключения
У меня сейчас вообще нонсенс. Без отладчика "Прекращена работа программы", а под отладчиком всё нормально работает.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 23.03.2018 в 16:41.
OmegaBerkut вне форума Ответить с цитированием
Старый 23.03.2018, 16:46   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

https://stackoverflow.com/questions/5762526/how-can-i-make-something-that-catches-all-unhandled-exceptions
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 23.03.2018, 17:33   #6
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Alex11223, я уже сталкивался с той проблемой, что по вашей ссылке.
У меня тогда вообще программа падала полностью (как в отладчике, так и без него), потому что объекты создавались параллельно, и так же параллельно добавлялись в массив (повреждение структуры памяти процесса).

Сейчас при выполнении напрямую (запуск без отладчика) программа падает. Если запускать через отладчик - всё нормально работает, при трассировке всё как предполагается.
Но при выполнении идентичного участка кода, без отладки - программа падает (Завершена работа программы).
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 23.03.2018, 18:18   #7
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

На счёт этого:
Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Без отладчика "Прекращена работа программы", а под отладчиком всё нормально работает.
В общем, суть такова ... Есть вот такая вот матёрая функция:
Код:
protected void ResetImage(double rotateAngle)
{
	try
	{
		rotate.Clear(Color.Transparent);
		rotate.RotateTransform((float)rotateAngle);
		rotate.DrawImage(
			initialImage,
			0-rotate.Transform.OffsetX,
			0-rotate.Transform.OffsetY,
			initialImage.Width,
			initialImage.Height);
		if (control.InvokeRequired)
			control.Invoke(refreshControl);
		else
			control.Refresh();
		stateChanged=true;
	} catch
	{
		// MessageBox.Show("Когда то это была отладочная информация");
	}
}
Изначально она была без try-catch.
Я сюда не похвастаться пришёл, а констатировать факт: при произвольном поведении объектов, когда с данными всё в порядке, функция DrawImage работает "как то не так", как - я ещё не понял.
Но:
- в отладке во время ошибки без try-catch исключение игнорируется отладчиком;
- без отладчика и без try-catch программа падает (Завершена работа программы);
- если прописать в try-catch - то при наличии исключения оно обрабатывается как и должно.


Что же касается этого:

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
программа, запущенная без отладки (файлом или Ctrl+F5) выдаёт какую то ошибку; устанавливаю "закономерность" её проявления, иду в отладку;
в отладке программа выполняет код с каким то дефектом, но исключение не выпадает
Сейчас у меня не получается добраться до той ошибки.

P. S. Отладчик вообще как то странно ведёт себя ... Я настроил, что бы игнорировались все исключения из System.Threading, потому что они мешают мне при отладке. Но они всё равно мешают мне при отладке, независимо от моих настроек, и независимо от того, обрабатываются эти исключения мною, или нет.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 23.03.2018 в 18:28.
OmegaBerkut вне форума Ответить с цитированием
Старый 23.03.2018, 20:54   #8
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Не знаю как у вас там в С#, но в Qt/C++ есть 2 класса для картинок. Так вот, 1 из них QPixmap является системно зависимым (т.е. использует нативную систему, без всяких абстракций). И в его документации явно указано - создавать и использовать ТОЛЬКО в основном потоке.

Возможно, вот это у вас и проявляется - создание/использование картинки вне GUI потока.
alexzk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VS C++6.0 + Windows 7 (64), проблема с отладкой ezus Visual C++ 4 24.02.2016 17:05
Проблема с отладкой pinkiller Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 24.04.2012 22:54
проблема с отладкой staaas1k Общие вопросы C/C++ 4 05.05.2010 16:36