Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "UnhandledException at ..." - как узнать место, возникновения ошибки? 
:(
    Опции темы
malor
  Дата 19.7.2011, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



user posted image
По CallStack'у уходящему длинной вереницей серых строк вниз не ясно на каком месте кода возникло. Как вычислить расположение?
PM MAIL   Вверх
asmdzen
Дата 19.7.2011, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: 3
Всего: 5



не исключено что здесь просто испорчен стек и ничего полезного узнать не удастся.
PM MAIL   Вверх
xvr
Дата 20.7.2011, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Похоже ваш SnapShotSrv.exe был собран без отладочной информации. Проверьте, вы Debug конфигурацию запускаете?

PM MAIL   Вверх
Estranged
Дата 20.7.2011, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 30.8.2010

Репутация: нет
Всего: 3



как узнать место, возникновения ошибки - даже адрес где упало написан: 0x30303131. Подключаем Windbg и смотрим. Или собрать модуль с отладочной информацией, тогда еще удобнее будет смотреть.
PM MAIL   Вверх
bsa
Дата 21.7.2011, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Estranged, тебе адрес подозрительным не кажется? по мне так смахивает на текст "1100".
PM   Вверх
Estranged
Дата 21.7.2011, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 30.8.2010

Репутация: нет
Всего: 3



bsa, еще какой подозрительный. Смотреть по стеку вызовов, откуда пришли, кто сделал передачу управления по такому адресу. Отладчик VS не умеет показывать имена функций, т.к. не имеет правильной pdb, а правильно настроенный Windbg сам скачает нужную pdb для ntdll и всех задействованных dll, что, как я уже писал, существенно облегчит диагностику.
PM MAIL   Вверх
xvr
Дата 22.7.2011, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Судя по стеку вызовов в какую то WinAPI функцию в качестве callback'а вместо адреса процедуры передали строку

PM MAIL   Вверх
malor
  Дата 28.7.2011, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



Вот этот код закомментил и перестало падать:
Код

int keyCode;                // Код нажатого символа
int down;
...................
[Присвоение значений переменным keyCode и down]
...................

char strKeyCode[10];
char strDown[2];
_itoa(keyCode, strKeyCode, 10);
_itoa(down, strDown, 2);
strcat(strKeyCode, " ");
strcat(strKeyCode, strDown);
SaveLog(strKeyCode);

Что в нем неправильно? Какой-нибудь выход за границы?

Собственно функция логгирования:
Код

bool SaveLog(char *strMesg)
{
    int result;

    time_t t = time(NULL);
    struct tm * tm = localtime(&t);
    strMesg = strcat(asctime(tm), strMesg);
    strMesg = strcat(strMesg, "\n");
    
    result = fputs(strMesg, pFileLog);
    fflush(pFileLog);

    if (result == EOF)
    {
        return false;
    }
    
    return true;
}


Это сообщение отредактировал(а) malor - 28.7.2011, 20:13
PM MAIL   Вверх
Dem_max
Дата 28.7.2011, 20:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



может не жопиться ? и сделать так
Код

char strKeyCode[100];
char strDown[100];



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Estranged
Дата 28.7.2011, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 30.8.2010

Репутация: нет
Всего: 3



Переполнение буфера на 99%.
_itoa(keyCode, strKeyCode, 10); - пусть 1 символ + нуль-терминатор
_itoa(down, strDown, 2);
strcat(strKeyCode, " "); - +1 символ
strcat(strKeyCode, strDown); - пусть еще +1
strMesg = strcat(asctime™, strMesg); - ?
strMesg = strcat(strMesg, "\n"); +1

Итого уже заняты 5 символов, asctime возвращает строку значительно длиннее 5 символов, в итоге стек подпорчен. 
PM MAIL   Вверх
bsa
Дата 29.7.2011, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



malorEstranged, быстро бежать и смотреть описание _itoa(). Ошибку найдете сразу же!!!
PM   Вверх
Estranged
Дата 29.7.2011, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 30.8.2010

Репутация: нет
Всего: 3



bsa, и что же там такого написано, что было упущено?
PM MAIL   Вверх
Dem_max
Дата 29.7.2011, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



да и что же там не то, я тоже не в курсе


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
asmdzen
Дата 29.7.2011, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: 3
Всего: 5



EstrangedDem_max, последний параметр не ограничение по символам а основание системы счисления (base), там по любому будет переполнение буфера
http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/
PM MAIL   Вверх
Dem_max
Дата 29.7.2011, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



ну и так понятно, что это код системы счисления, но как раз в этом месте ошибки нету.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0884 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.