Re: Как поймать глюк в Release версии программы
От: uncommon Ниоткуда  
Дата: 12.09.15 20:36
Оценка: :))) :))) :))) :)
Здравствуйте, Melamed, Вы писали:

M>Привет

M>Я написал программу. В Debug-версии программы все работает нормально. Начал готовить программу сдачи. Сделал Reliase версию моей программы и на одном из тестов она стала падать. Провел тот же тест с Debager-версии, программа работает нормально.

Всё просто — сдать программу в debug-версии
Re: Как поймать глюк в Release версии программы
От: Zenden Россия  
Дата: 11.09.15 13:29
Оценка: 7 (2) +4
Здравствуйте, Melamed, Вы писали:

M>Привет

M>Я написал программу. В Debug-версии программы все работает нормально. Начал готовить программу сдачи. Сделал Reliase версию моей программы и на одном из тестов она стала падать. Провел тот же тест с Debager-версии, программа работает нормально.

M>Выдает ошибку nhandled exception at at 0x75A3C42D in ConvertArchiv.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x10DFF090.


M>По внешним признакам ошибка происходит в довольно объемной процедуре. Нужно локализовать ошибку и принять решение об исправлении ошибки.


M>Среда обработки MSVS 2012 C++ голый win API + библиотека ZipArchive


делай релиз сборку с включенной генерацией дебаг информации
Re: Как поймать глюк в Release версии программы
От: Анатолий Широков СССР  
Дата: 13.09.15 15:24
Оценка: 2 (1) +1
Здравствуйте, Melamed, Вы писали:

Если штатные средства студии не помогают, попробуй внешние анализаторы типа dr. memory http://www.drmemory.org/
Обрати внимание на чтение неинициализированных данных — это прямое указание на то, что у тебя что-то имеет нестабильное стартовое состояние.

Удачи!
Отредактировано 14.09.2015 9:20 Анатолий Широков . Предыдущая версия . Еще …
Отредактировано 13.09.2015 15:24 Анатолий Широков . Предыдущая версия .
Re: Как поймать глюк в Release версии программы
От: tdiff  
Дата: 11.09.15 13:35
Оценка: +2
Здравствуйте, Melamed, Вы писали:

M>Выдает ошибку nhandled exception at at 0x75A3C42D in ConvertArchiv.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x10DFF090.


M>По внешним признакам ошибка происходит в довольно объемной процедуре. Нужно локализовать ошибку и принять решение об исправлении ошибки.


Я бы сначала проверил инициализацию переменных.
Re: Как поймать глюк в Release версии программы
От: Ops Россия  
Дата: 12.09.15 22:28
Оценка: +1
Здравствуйте, Melamed, Вы писали:

M>Среда обработки MSVS 2012 C++ голый win API + библиотека ZipArchive


Не нашел, что такое ZipArchive, их тыщщи разных. Может быть, что библиотека собрана с другими настройками и/или рантаймом?
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re: Как поймать глюк в Release версии программы
От: Константин Россия  
Дата: 14.09.15 17:48
Оценка: +1
Здравствуйте, Melamed, Вы писали:

M>Привет

M>Я написал программу. В Debug-версии программы все работает нормально. Начал готовить программу сдачи. Сделал Reliase версию моей программы и на одном из тестов она стала падать. Провел тот же тест с Debager-версии, программа работает нормально.

M>Выдает ошибку nhandled exception at at 0x75A3C42D in ConvertArchiv.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x10DFF090.


M>По внешним признакам ошибка происходит в довольно объемной процедуре. Нужно локализовать ошибку и принять решение об исправлении ошибки.


M>Среда обработки MSVS 2012 C++ голый win API + библиотека ZipArchive


* Отладка Release (как уже порекомендовали, включить debug info)
* Повставлять логи
Как поймать глюк в Release версии программы
От: Melamed Россия  
Дата: 11.09.15 12:12
Оценка:
Привет
Я написал программу. В Debug-версии программы все работает нормально. Начал готовить программу сдачи. Сделал Reliase версию моей программы и на одном из тестов она стала падать. Провел тот же тест с Debager-версии, программа работает нормально.

Выдает ошибку nhandled exception at at 0x75A3C42D in ConvertArchiv.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x10DFF090.

По внешним признакам ошибка происходит в довольно объемной процедуре. Нужно локализовать ошибку и принять решение об исправлении ошибки.

Среда обработки MSVS 2012 C++ голый win API + библиотека ZipArchive
Re: Как поймать глюк в Release версии программы
От: BlackEric http://black-eric.lj.ru
Дата: 11.09.15 12:28
Оценка:
Здравствуйте, Melamed, Вы писали:

M>Привет

M>Я написал программу. В Debug-версии программы все работает нормально. Начал готовить программу сдачи. Сделал Reliase версию моей программы и на одном из тестов она стала падать. Провел тот же тест с Debager-версии, программа работает нормально.

M>Выдает ошибку nhandled exception at at 0x75A3C42D in ConvertArchiv.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x10DFF090.


M>По внешним признакам ошибка происходит в довольно объемной процедуре. Нужно локализовать ошибку и принять решение об исправлении ошибки.


M>Среда обработки MSVS 2012 C++ голый win API + библиотека ZipArchive


1. Посмотреть наличие #ifdef DEBUG
2. Разбить процедуру на более мелкие. Может и ошибку в процессе найдете
3. cout<<("line 1\n");
https://github.com/BlackEric001
Re: Как поймать глюк в Release версии программы
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 11.09.15 12:58
Оценка:
Здравствуйте, Melamed, Вы писали:

M>Привет

M>Среда обработки MSVS 2012 C++ голый win API + библиотека ZipArchive
Искать баг в дебажной, обратить внимание на многопточность и на утечки памяти.
Sic luceat lux!
Re[2]: Как поймать глюк в Release версии программы
От: Caracrist https://1pwd.org/
Дата: 11.09.15 23:10
Оценка:
Здравствуйте, Zenden, Вы писали:


Z>делай релиз сборку с включенной генерацией дебаг информации


и отключи оптимизацию
~~~~~
~lol~~
~~~ Single Password Solution
Re[3]: Как поймать глюк в Release версии программы
От: Константин Россия  
Дата: 14.09.15 17:46
Оценка:
Здравствуйте, Caracrist, Вы писали:

C>Здравствуйте, Zenden, Вы писали:



Z>>делай релиз сборку с включенной генерацией дебаг информации


C>и отключи оптимизацию


Зачем? Обычно и без этого нормально всё отлаживается
Re: Как поймать глюк в Release версии программы
От: lpd Черногория  
Дата: 15.09.15 12:29
Оценка:
Подобное случалось у меня неоднократно. 90% что выходите за границу массива или ездиете по невыделенной памяти каким-то образом, что не мешает в Debug-версии так-как перезаписываете просто отладочную информацию. Особенно учитывая сообщение exceptionа.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Re: Как поймать глюк в Release версии программы
От: AlexGin Беларусь  
Дата: 16.09.15 09:15
Оценка:
Здравствуйте, Melamed, Вы писали:

M>Привет

M>Я написал программу. В Debug-версии программы все работает нормально. Начал готовить программу сдачи. Сделал Reliase версию моей программы и на одном из тестов она стала падать. Провел тот же тест с Debager-версии, программа работает нормально.
Для этой цели применяем вывод информации в файл *.log.

M>Выдает ошибку nhandled exception at at 0x75A3C42D in ConvertArchiv.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x10DFF090.

Ставить вывод в файл *.log — в тех местах, где есть подозрение на проблему (выделение памяти, работа с массивами).

M>По внешним признакам ошибка происходит в довольно объемной процедуре. Нужно локализовать ошибку и принять решение об исправлении ошибки.

Если, например, имеется процедура: MyFoo то ставим логи внутри процедуры: MyFoo_1, MyFoo_2 и т.д.
В таких логах делаю вывод переменны (указатели, индексы массивов) — которые могут посодействовать решению проблемы.

M>Среда обработки MSVS 2012 C++ голый win API + библиотека ZipArchive

Применяем логирование в наших разработках на MFC и WinAPI (конкретно с ZipArchive не работал).

Вот примеры логирования:
http://www.codeproject.com/Articles/2486/A-Simple-LogFile
http://www.codeproject.com/Articles/584794/Simple-logger-for-Cplusplus
http://www.codeproject.com/Articles/12/A-Class-for-Creating-a-Trace-Log
Re: Как поймать глюк в Release версии программы
От: Molchalnik  
Дата: 18.09.15 09:24
Оценка:
Здравствуйте, Melamed, Вы писали:

M>Привет

M>Я написал программу. В Debug-версии программы все работает нормально. Начал готовить программу сдачи. Сделал Reliase версию моей программы и на одном из тестов она стала падать. Провел тот же тест с Debager-версии, программа работает нормально.

используй инструменты по поиску проблем с памятью для начала. Так есть много методов, начиная с пряморукого программирования, но в данном случае они преждевременны (или уже опоздали, как в случае с пряморуким программированием)
Re: Как поймать глюк в Release версии программы
От: Кодт Россия  
Дата: 21.09.15 10:19
Оценка:
Здравствуйте, Melamed, Вы писали:

M>Выдает ошибку nhandled exception at at 0x75A3C42D in ConvertArchiv.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x10DFF090.


Самое простое — посмотреть в диспетчере задач на расход памяти. Может быть, релизная версия реально её жрёт.
Если да — смотреть, почему.
Если нет — значит, кто-то расстрелял кучу.

Жрать можно по-разным причинам.

1) Нюансы алгоритма.
Например, если многопоточное приложение в режиме producer-consumer — в дебаге работает, как пинг-понг: послал-принял-послал-принял, а в релизе другая временная диаграмма, вплоть до блокировки потока-потребителя, и вышло послал-послал-послал...

2) Мусор на входе. Неинициализированная или неправильно инициализированная переменная, которая влияет на размер выделяемых данных.
size_t xz;
vector<int> v;
v.reserve(xz); // ошибку даже не сразу в отладчике заметишь, ибо IDE показывает размер, а не резерв массива

int wtf;
while(wtf > 0) v.push_back(wtf); // особенно весело для отрицательных чисел


3) Разные размеры структур данных — влияющие на выбор той или иной ветки кода
struct FOO {
  int x;
  int y;
#ifdef DEBUG
  int z;
#endif
};

struct BAR {
  unsigned int x;
  unsigned int y;
  unsigned int z;
};

...
if(sizeof(FOO) == sizeof(BAR))
 milota();
else
  drei_hundert_teuffelen(); // мы это не отлаживали

или, что более граблисто,
template<class It> void process_iterated_item(It)          { milota(); } // мы отлаживали только это
template<class T>  void process_iterated_item(T*)          { red_alert(); }
                   void process_iterated_item(const char*) { treat_as_null_terminated_string(); } // а это вызывали вообще в других случаях

vector<int> v;
vector<char> s;

...
process_iterated_item(v.begin());
process_iterated_item(s.begin());


Ну а расстрелять память — это вообще тысячи способов.
Перекуём баги на фичи!
Re: Как поймать глюк в Release версии программы
От: T4r4sB Россия  
Дата: 25.09.15 07:32
Оценка:
Здравствуйте, Melamed, Вы писали:

M>Привет

M>Я написал программу. В Debug-версии программы все работает нормально. Начал готовить программу сдачи. Сделал Reliase версию моей программы и на одном из тестов она стала падать. Провел тот же тест с Debager-версии, программа работает нормально.

M>Выдает ошибку nhandled exception at at 0x75A3C42D in ConvertArchiv.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x10DFF090.


M>По внешним признакам ошибка происходит в довольно объемной процедуре. Нужно локализовать ошибку и принять решение об исправлении ошибки.


M>Среда обработки MSVS 2012 C++ голый win API + библиотека ZipArchive


А вот я однажды в MSVC-2003 именно в релизе поймал глюк, который никто не смог объяснить порчей памяти или неинициализированными переменными.
Я долго пытался понять, почему объект создаётся корректно, а сразу после передачи в другую функцию объект превращался в груду мусора. Я нашёл место, где происходит что-то странное, внимательно изучил асмовыхлоп... Короче, суть в том, что компилятор насоздавал на стеке временных объектов, повызывал их методы, а потом в другую функцию кинул ссылку на этот временный объект, но с неправильным смещением относительно верхушки стека (ну то есть типа записал в регистр esp-12 вместо esp-8, как-то так).
У меня даже асмокод где-то сохранился.

Мне сказали, что такое бывает.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Отредактировано 25.09.2015 7:33 T4r4sB . Предыдущая версия .
Re[2]: Как поймать глюк в Release версии программы
От: qqqqq  
Дата: 26.09.15 19:49
Оценка:
Здравствуйте, uncommon, Вы писали:
U>Всё просто — сдать программу в debug-версии
ты не поверишь...
Re[4]: Как поймать глюк в Release версии программы
От: Vain Россия google.ru
Дата: 28.09.15 07:46
Оценка:
Здравствуйте, Константин, Вы писали:

Z>>>делай релиз сборку с включенной генерацией дебаг информации

C>>и отключи оптимизацию
К>Зачем? Обычно и без этого нормально всё отлаживается
не всегда. к примеру, может стек быть разбит.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.