информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Вот я и говорю, делай дебаг-лог 22.06.04 14:26  Число просмотров: 1458
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Чем подробнее, тем легче будет выловить ошибку.

Анализ переменных в точке вылета тоже иногда помогает, но не всегда понятно почему к примеру в данном конкретном указателе сейчас содержится мусор
<programming>
[C++] Программа вылетает, но не разберусь из-за чего... 21.06.04 20:26  
Автор: CrazyPitbull Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Программа вылетает не в определённом месте, а непонятно где, точнее вылетает не постоянно, а то вылетает то нет...
Сама программа написана в билдере 6.0. При работе с СодеГуардом, ошибок нет. Покрайней мере не выдаёт никаких сообщений. Программа часто использует динамическую память.
Ещё в программе используется дополнительный поток, создаётся стандартными билдеровскими средствами, через класс TTread. Не может быть такого, что программа вылетает из-за асинхронизации в некоторых случаях работы. Идёт обращение к СОМ-порту, но только из даполнительного потока, главный поток работает только с интерфейсом...

Тестировал долго, на одном и том же месте программа то вылетает то нет....
А вообще были случаи, что в процесе отладки сам билдер выкидывал сообщения о ошибках связаных с использованием потока, но после продолжения работы, программа работала...
[C++] Страничное нарушение. 22.06.04 03:39  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
При переполнении выделенного буфера в динамической памяти Мастдай приспокойно выделяет следующую страницу, но при этом, он не помечает ее, как связанную, где-то "у себя в бошке". При следующем (нормальном) запросе на выделение памяти он приспокойно пытается выделить ту же страницу и обнаруживает, что она занята: крах. PAGE_FAULT_ERROR

Происходит это, естессно не в момент переполнения, а в любой момент выделения памяти после того.
[C++] Не совсем так 22.06.04 12:24  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> При переполнении выделенного буфера в динамической памяти
> Мастдай приспокойно выделяет следующую страницу, но при
> этом, он не помечает ее, как связанную, где-то "у себя в
> бошке". При следующем (нормальном) запросе на выделение
> памяти он приспокойно пытается выделить ту же страницу и
> обнаруживает, что она занята: крах. PAGE_FAULT_ERROR
Мастдай не выделяет, а там находятся управляющие структуры кучи. Если запороть кучу, то продолжать с ней работать можно, а когда происходит следующее обращение, то по указателю в разрушенной куче винда может обратиться куда угодно. И вот тогда то слетает по #PF.

> Происходит это, естессно не в момент переполнения, а в
> любой момент выделения памяти после того.
А откуда такие сведения о личной жизни виндов?) 22.06.04 04:23  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
> При переполнении выделенного буфера в динамической памяти
> Мастдай приспокойно выделяет следующую страницу, но при
> этом, он не помечает ее, как связанную, где-то "у себя в
> бошке". При следующем (нормальном) запросе на выделение
> памяти он приспокойно пытается выделить ту же страницу и
> обнаруживает, что она занята: крах. PAGE_FAULT_ERROR
> Происходит это, естессно не в момент переполнения, а в
> любой момент выделения памяти после того.

А как же Access violation'ы всяческие при обращении к левым адресам? А насчет вылета "молча" то полагаю у автора поста либо чтото с синхронизацией не в порядке либо проблемы с обращением к структурам не выделяемым в динамической памяти (запись 1000 байт в char[999] например Ж)).

Кстати еще - это там случайно не библиотека писанная на билдере и вызываемая из другой программы из потоков? В этом случае надо написать в начале функции DllMain: IsMultiThread=true;
Может в синхронизации проблемма и заключается... 22.06.04 08:27  
Автор: CrazyPitbull Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> А как же Access violation'ы всяческие при обращении к левым
> адресам? А насчет вылета "молча" то полагаю у автора поста
> либо чтото с синхронизацией не в порядке либо проблемы с
> обращением к структурам не выделяемым в динамической памяти
> (запись 1000 байт в char[999] например Ж)).
>
> Кстати еще - это там случайно не библиотека писанная на
> билдере и вызываемая из другой программы из потоков? В этом
> случае надо написать в начале функции DllMain:
> IsMultiThread=true;

Библиотек нету...
И к структурам с невыделеной памятью тоже не обращается, так бы CodeGuard выдал сообщение о неверном обращении...
Допускаю, что проблемма в синхронизации, но как тогда это отследить, убедиться в этом на все 100% ?
Дык, с какой ошибкой вылетает-то? 23.06.04 04:50  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
CodeGuard не скажет тебе если у тя в ReadFile каком нить за... 22.06.04 14:35  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
> Библиотек нету...
> И к структурам с невыделеной памятью тоже не обращается,
> так бы CodeGuard выдал сообщение о неверном обращении...
> Допускаю, что проблемма в синхронизации, но как тогда это
> отследить, убедиться в этом на все 100% ?
CodeGuard не скажет тебе если у тя в ReadFile каком нить за буфер вылезет. Потому что он только Сшные функции отслеживает (memcpy там всякие). Про АПИ он ниче не знает потому некорректные обращения в АПИ просто не заметит.
посмотри дебагером например SofIce 21.06.04 21:57  
Автор: choor Статус: Elderman
<"чистая" ссылка>
Изначально загрузи SymbolLoader'ом
Сделай трейс по шагу и увидишь как и что у тебя происходит, на каком моменте что вылетает.
P.S. следи за регистрами
Думаю пошаговый трейс будет работать нормально 22.06.04 12:28  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Потому как проблемы скорее всего в рассинхронизации потоков.
Лучше загрузить сайс и дождаться фаулта - винда сразу вывалится в сайс. После этого смотреть на состояние программы (стек, переменные и пр).

А еще лучше наставить OutputDebugString-ов с выводом всей более-менее серьезной инфы (вход/выход в функции, передаваемые параметры, возвращаемые значения, вывод в контрольных точках), причем особое внимание уделять состоянию указателей. Далее по полученному логу можно довольно точно восстановить причину краха.
Пошаговый трейс работает нормально 22.06.04 13:41  
Автор: CrazyPitbull Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Программа не вываливается при пошаговом трейсинге. Более того вываливается в процессе некоторой работы, причём ситуация вроде нормально обрабатывается (при пошаговом трейсинге всё работает как надо), но иногда происходит вылет...
Вот я и говорю, делай дебаг-лог 22.06.04 14:26  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Чем подробнее, тем легче будет выловить ошибку.

Анализ переменных в точке вылета тоже иногда помогает, но не всегда понятно почему к примеру в данном конкретном указателе сейчас содержится мусор
Почему исходник никто не показывает... 21.06.04 21:08  
Автор: zonny <Sasha> Статус: Member
<"чистая" ссылка>
исправь сабж
Тык их много... 22.06.04 00:22  
Автор: CrazyPitbull Статус: Незарегистрированный пользователь
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach