Re: Как в 6 студии отловить место StackOverflow ?
От: _Winnie Россия C++.freerun
Дата: 22.09.05 14:01
Оценка: 4 (2) -1
Здравствуйте, vgrigor, Вы писали:

V>Как найти кто делает этот вызов ?

V>(программа большая из нескольких модулей)
Купить бутылку пива и растыкать копипастом логгинг по тем местам, где проходит программа.

#define MY_TRACE printf("%s %s %d", __FILE__, __FUNCTION__, __LINE__)

Далее копируем во все места, уточняя то место, где перестают печататься эти сообщения.
Ничего лучше не придумал
Правильно работающая программа — просто частный случай Undefined Behavior
Re: Как в 6 студии отловить место StackOverflow ?
От: Кодт Россия  
Дата: 22.09.05 14:53
Оценка: 1 (1)
Здравствуйте, vgrigor, Вы писали:

Может быть, там не (только) stack overflow, а (ещё и) порча памяти?
Попробуй с Bounds Checker'ом запустить. Он такие вещи лучше просекает, чем встроенные проверялки.
Перекуём баги на фичи!
Как в 6 студии отловить место StackOverflow ?
От: vgrigor  
Дата: 22.09.05 13:07
Оценка:
программа падает с таким сообщением,
стек вызовов показывает

NTDLL! 7c90eafa()
NTDLL! 7c90378b()

И ссылки на мой код нет в стеке.

в чередующейся зацикленной последовательности.

Как найти кто делает этот вызов ?
(программа большая из нескольких модулей)

Спасибо
Винтовку добудешь в бою!
Re[2]: Как в 6 студии отловить место StackOverflow ?
От: vgrigor  
Дата: 22.09.05 14:11
Оценка:
Ничего тоже полезно.

__FUNCTION__ особенно.


еще есть установка обраюотчика таких ошибок, но вот совсем не помю как называется....
может помнит кто?
Винтовку добудешь в бою!
Re[2]: Как в 6 студии отловить место StackOverflow ?
От: vgrigor  
Дата: 22.09.05 15:23
Оценка:
К>Может быть, там не (только) stack overflow, а (ещё и) порча памяти?
К>Попробуй с Bounds Checker'ом запустить. Он такие вещи лучше просекает, чем встроенные проверялки.

Может быть и порча памяти,
access violation — тоже вылезает.

А для 6 студии он есть?

или в нем как в отдельном продукте для 6 студии можно запускать?

Bounds Checker 7.х версии для этого подойдет?
Винтовку добудешь в бою!
Re[3]: Как в 6 студии отловить место StackOverflow ?
От: vgrigor  
Дата: 22.09.05 15:32
Оценка:
я почитал что он и для 6 студии работает.

посмотрим как он такую гадость вылавливает,
про которую студия почти ничего не может сказать.
Винтовку добудешь в бою!
Re[2]: Как в 6 студии отловить место StackOverflow ?
От: vgrigor  
Дата: 23.09.05 09:38
Оценка:
поделюсь свои печальным опытом:

поставил bounds checker 7.2,
он показывает кучу всяких недоразумений,
которые "работают" — благодаря дефолтным настройкам.

но я искал не это ведь...
как бы несерьезности отключить?

но до нахождения серезных ошибок из VS 6 я в нем не дошел,
gполностью не смог он скомпилировать инструментовано,
Browsing information — error.

Замечу для сравнения — аналогичная ошибка в 7.1 студии,
обрабатывается все-таки самой студией очень хорошо,
выполнение прерывается,
и студия говорит "stack corrupted -возле такой-то переменной",
после вот этого вызоова в вашем коде".

И все, никаких мучительных догадок в здоровенной программе.

В 6 студии отличная прога bounds checker работает нехорошо как-то.

или я слабо разобрался,

можно сделать/настроить так чтобы bounds checker вываливал прямо на серьезную ошибку?
Винтовку добудешь в бою!
Re[3]: Как в 6 студии отловить место StackOverflow ?
От: Глеб Алексеев  
Дата: 23.09.05 09:47
Оценка:
Здравствуйте, vgrigor, Вы писали:

V>

V>можно сделать/настроить так чтобы bounds checker вываливал прямо на серьезную ошибку?
V>

В Devpartner->Options->Error detection можно настраивать, какие ошибки ловить, и какие — нет. Тебя, скорее всего, интересует Memory Tracking и Call Validation.
Кроме того, в любой момент можно отключить диалог ошибки (Display error and pause),прогнать программу до падения и потом уже смотреть на лог всех ошибок.
Ну и не забываем о кнопочке "Suppress" в диалоге ошибки.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Как в 6 студии отловить место StackOverflow ?
От: Кодт Россия  
Дата: 23.09.05 13:05
Оценка:
Здравствуйте, Глеб Алексеев, Вы писали:

V>>

V>>можно сделать/настроить так чтобы bounds checker вываливал прямо на серьезную ошибку?
V>>

ГА>В Devpartner->Options->Error detection можно настраивать, какие ошибки ловить, и какие — нет. Тебя, скорее всего, интересует Memory Tracking и Call Validation.
ГА>Кроме того, в любой момент можно отключить диалог ошибки (Display error and pause),прогнать программу до падения и потом уже смотреть на лог всех ошибок.
ГА>Ну и не забываем о кнопочке "Suppress" в диалоге ошибки.

Кроме того, STL для VC6 написана сомнительно — BoundsChecker принимает некоторые совершенно невинные места за ошибки. Но его можно научить. Нажимаешь Supress, и больше он к этим местам не придирается.
Перекуём баги на фичи!
Re[5]: Как в 6 студии отловить место StackOverflow ?
От: vgrigor  
Дата: 23.09.05 15:10
Оценка:
Да, действительно сначала придирался к STL.

Его надо настраивать и учить чего не надо ловить.
(в среднем проекте куча того что работает — без инициализаций, но по дефолту,
что конечно не есть хорошо, но уже много так написано....)

А чего он не стал компилировать из-за Browse Information error,
когда обычная компиляция все нормально делала?
Винтовку добудешь в бою!
Re: Как в 6 студии отловить место StackOverflow ?
От: FlameStorm Земля ya.ru
Дата: 25.09.05 20:55
Оценка:
Здравствуйте, vgrigor, Вы писали:

> Stack corruption...


Попробуй всё же ляпсусы найти. Вот такой код, например, "дарит" нам это самое "повреждение стэка", в своё время столкнулся:

#include <..>

main()
{
    short x;
    scanf("%d", &x);
}


Отвели в стэке два байта, записали четыре — и привет.
Re[3]: Как в 6 студии отловить место StackOverflow ?
От: Lepsik Гондурас https://www.kirdyk.club/
Дата: 27.09.05 14:58
Оценка:
Здравствуйте, vgrigor, Вы писали:

V>Ничего тоже полезно.


V>__FUNCTION__ особенно.



V>еще есть установка обраюотчика таких ошибок, но вот совсем не помю как называется....

V>может помнит кто?


devtrack, Coverity
Re[2]: Как в 6 студии отловить место StackOverflow ?
От: barrett Россия  
Дата: 15.10.05 17:49
Оценка:
Здравствуйте, _Winnie, Вы писали:

_W>Купить бутылку пива и растыкать копипастом логгинг по тем местам, где проходит программа.


_W>#define MY_TRACE printf("%s %s %d", __FILE__, __FUNCTION__, __LINE__)

И не забыть про fflush.
Re[3]: Как в 6 студии отловить место StackOverflow ?
От: Alex Alexandrov США  
Дата: 16.10.05 17:13
Оценка:
Здравствуйте, barrett, Вы писали:

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


_W>>Купить бутылку пива и растыкать копипастом логгинг по тем местам, где проходит программа.


_W>>#define MY_TRACE printf("%s %s %d", __FILE__, __FUNCTION__, __LINE__)

B>И не забыть про fflush.

А проще печатать в stderr. Он не буферизуется. Или сделать один раз setbuf(stdout, NULL).
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
It's kind of fun to do the impossible (Walt Disney)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.