Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
25.10.2014, 18:50
|
|||
|---|---|---|---|
Ошибка в сообщении об ошибке (или как перехватить вылет vsprintf()) |
|||
|
#18+
Есть такой код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Пишу так в лог ошибку, т.к. ошибки не всегда, то некоторые записи оказываются непроверенные и вместо записи в лог получаю вылет проги. Как правильно проверить и предотвратить вылет? try ... catch не помогло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.10.2014, 19:06
|
|||
|---|---|---|---|
Ошибка в сообщении об ошибке (или как перехватить вылет vsprintf()) |
|||
|
#18+
Dima TЕсть такой код Пишу так в лог ошибку, т.к. ошибки не всегда, то некоторые записи оказываются непроверенные и вместо записи в лог получаю вылет проги. Как правильно проверить и предотвратить вылет? Никак. Это защита памяти. Dima T try ... catch не помогло. и не поможет. Это защита памяти, это не исключение. должно быть Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.10.2014, 19:17
|
|||
|---|---|---|---|
Ошибка в сообщении об ошибке (или как перехватить вылет vsprintf()) |
|||
|
#18+
MasterZivдолжно быть Я понимаю что так должно быть по другому, но хочу увидеть в логе что-то типа 'Кривой шабон "error %s"' но не вылет. MasterZivНикак. Это защита памяти. Хорошо, в виндовсе SEH поможет (__try ... ), а как это перехватить в линуксе ? Мне универсально надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.10.2014, 19:38
|
|||
|---|---|---|---|
Ошибка в сообщении об ошибке (или как перехватить вылет vsprintf()) |
|||
|
#18+
Я понимаю что так должно быть по другому, но хочу увидеть в логе что-то типа 'Кривой шабон "error %s"' но не вылет. Не увидишь. Никогда. Это -- С-шный код, а не С++, там нет исключений. GPF -- и с копыт... MasterZivНикак. Это защита памяти. Хорошо, в виндовсе SEH поможет (__try ... ), а как это перехватить в линуксе ? Мне универсально надо.[/quot] Никак. Нет SEH в Linux. Если очень хочется, используй какой-нибудь С++ аналог vsprintf из BOOST-а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.10.2014, 21:07
|
|||
|---|---|---|---|
|
|||
Ошибка в сообщении об ошибке (или как перехватить вылет vsprintf()) |
|||
|
#18+
Dima T, Вылетает-то из-за чего? Если переполнение буфера, то ограничить запись в буфер через vs n printf. Это впрочем по-любому надо сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.10.2014, 21:09
|
|||
|---|---|---|---|
|
|||
Ошибка в сообщении об ошибке (или как перехватить вылет vsprintf()) |
|||
|
#18+
Anatoly MoskovskyВылетает-то из-за чего? А, почитал внимательнее. Снимаю вопрос. Избежать такого крэша никак нельзя, не устранив "..." . Только через строго типизированные параметры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.10.2014, 21:12
|
|||
|---|---|---|---|
|
|||
Ошибка в сообщении об ошибке (или как перехватить вылет vsprintf()) |
|||
|
#18+
Dima TХорошо, в виндовсе SEH поможет (__try ... ), а как это перехватить в линуксе ? Мне универсально надо. MasterZivНикак. Нет SEH в Linux. Временно перехватить SIGSEGV. Но суть в том что это не устранит мусор в логах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.10.2014, 00:34
|
|||
|---|---|---|---|
Ошибка в сообщении об ошибке (или как перехватить вылет vsprintf()) |
|||
|
#18+
Anatoly MoskovskyDima TХорошо, в виндовсе SEH поможет (__try ... ), а как это перехватить в линуксе ? Мне универсально надо. MasterZivНикак. Нет SEH в Linux. Временно перехватить SIGSEGV. Но суть в том что это не устранит мусор в логах. Да важнее не мусор в логах, а повреждение стека в потоке, и, как следствие, крах потока , а если он главный -- то всего приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.10.2014, 01:00
|
|||
|---|---|---|---|
|
|||
Ошибка в сообщении об ошибке (или как перехватить вылет vsprintf()) |
|||
|
#18+
MasterZiv, Как избежать повреждения памяти я выше написал - vsnprintf. Перехват SIGSEGV нужен для обработки чтения несуществующей памяти из-за мусора в указателе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.10.2014, 01:03
|
|||
|---|---|---|---|
|
|||
Ошибка в сообщении об ошибке (или как перехватить вылет vsprintf()) |
|||
|
#18+
Dima TКак правильно проверить и предотвратить вылет? Использовать на процедуру to_log атрибут format в сочетании с -Eformat. И тогда твоя программа просто не откомпилируется. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.10.2014, 08:36
|
|||
|---|---|---|---|
Ошибка в сообщении об ошибке (или как перехватить вылет vsprintf()) |
|||
|
#18+
Anatoly MoskovskyMasterZiv, Как избежать повреждения памяти я выше написал - vsnprintf. Перехват SIGSEGV нужен для обработки чтения несуществующей памяти из-за мусора в указателе. ок, а как ты стек будешь восстанавливать? конечно, в которых calling convention он восстанавливается автоматом ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.10.2014, 13:29
|
|||
|---|---|---|---|
Ошибка в сообщении об ошибке (или как перехватить вылет vsprintf()) |
|||
|
#18+
Заменил на vsnprintf, но мою проблему это не решает. Dimitry SibiryakovИспользовать на процедуру to_log атрибут format в сочетании с -Eformat. И тогда твоя программа просто не откомпилируется. Спасибо, так еще лучше. написал так Код: plaintext 1. только ключ -Wformat (-Eformat не понимает) Код: plaintext 1. Компилируется, но варнинги пишет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.10.2014, 13:50
|
|||
|---|---|---|---|
|
|||
Ошибка в сообщении об ошибке (или как перехватить вылет vsprintf()) |
|||
|
#18+
Dima TКомпилируется, но варнинги пишет. Добавь -Werror и это будут ошибки. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.10.2014, 14:43
|
|||
|---|---|---|---|
|
|||
Ошибка в сообщении об ошибке (или как перехватить вылет vsprintf()) |
|||
|
#18+
MasterZivок, а как ты стек будешь восстанавливать? конечно, в которых calling convention он восстанавливается автоматом ... Я не понял зачем надо восстаналивать стек. Там проблема не в этом. Даже если проигнорить ошибку доступа, то выполнение printf продолжится имея мусор в регистрах. Не зря в стандарте чтение по 0 или неинициализированному указателю - UB Впрочем что тут обсуждать - нормальное решение уже найдено :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.10.2014, 17:05
|
|||
|---|---|---|---|
Ошибка в сообщении об ошибке (или как перехватить вылет vsprintf()) |
|||
|
#18+
Anatoly Moskovsky, стек может быть разрушена потому что пихнули туда одно количество байт, а впихнут другое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.10.2014, 18:44
|
|||
|---|---|---|---|
|
|||
Ошибка в сообщении об ошибке (или как перехватить вылет vsprintf()) |
|||
|
#18+
MasterZivстек может быть разрушена потому что пихнули туда одно количество байт, а впихнут другое. Не может. Стэк у cdecl чистит вызывающая сторона, так что сколько она туда впихнула, столько и выпихнет. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.10.2014, 22:50
|
|||
|---|---|---|---|
Ошибка в сообщении об ошибке (или как перехватить вылет vsprintf()) |
|||
|
#18+
Dimitry Sibiryakov, соглашения о вызовах бывают разные... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&tablet=1&tid=2019253]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 159ms |

| 0 / 0 |
