| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > "UnhandledException at ..." - как узнать место |
| Автор: malor 19.7.2011, 21:32 |
![]() По CallStack'у уходящему длинной вереницей серых строк вниз не ясно на каком месте кода возникло. Как вычислить расположение? |
| Автор: asmdzen 19.7.2011, 22:08 |
| не исключено что здесь просто испорчен стек и ничего полезного узнать не удастся. |
| Автор: xvr 20.7.2011, 20:13 |
| Похоже ваш SnapShotSrv.exe был собран без отладочной информации. Проверьте, вы Debug конфигурацию запускаете? |
| Автор: Estranged 20.7.2011, 22:15 |
| как узнать место, возникновения ошибки - даже адрес где упало написан: 0x30303131. Подключаем Windbg и смотрим. Или собрать модуль с отладочной информацией, тогда еще удобнее будет смотреть. |
| Автор: bsa 21.7.2011, 19:39 |
| Estranged, тебе адрес подозрительным не кажется? по мне так смахивает на текст "1100". |
| Автор: Estranged 21.7.2011, 23:38 |
| bsa, еще какой подозрительный. Смотреть по стеку вызовов, откуда пришли, кто сделал передачу управления по такому адресу. Отладчик VS не умеет показывать имена функций, т.к. не имеет правильной pdb, а правильно настроенный Windbg сам скачает нужную pdb для ntdll и всех задействованных dll, что, как я уже писал, существенно облегчит диагностику. |
| Автор: xvr 22.7.2011, 10:40 |
| Судя по стеку вызовов в какую то WinAPI функцию в качестве callback'а вместо адреса процедуры передали строку |
| Автор: malor 28.7.2011, 20:11 | ||||
Вот этот код закомментил и перестало падать:
Что в нем неправильно? Какой-нибудь выход за границы? Собственно функция логгирования:
|
| Автор: Dem_max 28.7.2011, 20:15 | ||
может не жопиться ? и сделать так
|
| Автор: Estranged 28.7.2011, 22:03 |
| Переполнение буфера на 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 символов, в итоге стек подпорчен. |
| Автор: bsa 29.7.2011, 10:56 |
| malor, Estranged, быстро бежать и смотреть описание _itoa(). Ошибку найдете сразу же!!! |
| Автор: Estranged 29.7.2011, 20:15 |
| bsa, и что же там такого написано, что было упущено? |
| Автор: Dem_max 29.7.2011, 21:05 |
| да и что же там не то, я тоже не в курсе |
| Автор: asmdzen 29.7.2011, 21:11 |
| Estranged, Dem_max, последний параметр не ограничение по символам а основание системы счисления (base), там по любому будет переполнение буфера http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/ |
| Автор: Dem_max 29.7.2011, 21:17 |
| ну и так понятно, что это код системы счисления, но как раз в этом месте ошибки нету. |
| Автор: asmdzen 29.7.2011, 22:25 |
а могла бы быть )) |
| Автор: Dem_max 30.7.2011, 08:34 | ||
походу ТС адский программер, в небольшом участке кода столько ошибок, мама дорогая. |
| Автор: bsa 1.8.2011, 09:54 | ||
Да ладно? По-моему второй параметр используется именно как размер буфера, а не основание системы счисления, коим он должен быть. |