|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||||||
Пустые дебаг методы vs полное выпиливание с проекта26.01.2017, 20:57. Показов 2965. Ответов 48
Метки нет (Все метки)
Добрый вечер,
Моё мнение: если макрос - то особо не поиграться с шаблонами и отсутствие статического проверки типа если методы пустышки - то будет ли создаваться под них стек и вызов, или компилятор с оптимизирует всё это дело?
0
|
||||||
| 26.01.2017, 20:57 | |
|
Ответы с готовыми решениями:
48
Пустые методы в перечислении java.util.concurrent.TimeUnit Выпиливание экземпляра класса самим собой |
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
||
| 28.01.2017, 23:29 | ||
|
0
|
||
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||
| 28.01.2017, 23:38 [ТС] | ||
|
0
|
||
|
Ушел с форума
|
|||
| 29.01.2017, 10:55 | |||
|
Да, логи, даже очень подробные и хорошо продуманные, далеко не всегда могут точно указать на функцию и номер строки в ней, в которой произошел сбой. Но они позволяют мысленно проследить ход выполнения программы и дойти до этой точки или хотя бы примерно до того места, где был сбой. Вот пример: при работе сервера один из его рабочих потоков начал грузить процессор и "зациклился", сервер перестал отвечать на команды и пришлось прибить его из диспетчера задач. Вот кусок лога: NDSrv [I] registerDevice: status = OK. NDSrv [I] createWorkerPool: numThreads = 8 NDSrv [I] createConnection: addr = 10.0.64.152, port = 80 NDSrv [I] delegateWork: thread = 1 NDSrv [I] thread(1): 973 bytes received, calling handler... NDSrv [I] thread(1): 973 bytes received, calling handler... NDSrv [I] thread(1): 973 bytes received, calling handler... NDSrv [I] thread(1): 973 bytes received, calling handler... NDSrv [I] thread(1): 973 bytes received, calling handler... NDSrv [I] thread(1): 973 bytes received, calling handler... NDSrv [I] thread(1): 973 bytes received, calling handler... ... Здесь видно, что до вызова delegateWork все было в порядке, после чего обработчик потока почему-то стал рекурсивно вызывать сам себя. Одинаковое количество принятых байт еще больше усиливает подозрение. Логи нам не скажут, что кто-то забыл в полиморфный метод хэндлера добавить ключевое слово virtual. Но они скажут, что надо открывать и смотреть код delegateWork и функцию thread. Т.е., как минимум, логи здесь помогли очень сильно сузить круг поисков. А у клиентов окружение иногда настолько нестандартное и заковыристое, что бывает всякое. Иногда проблемы возникают из-за совершенно простых функций, которые до этого годами использовались и никто не жаловался. Иногда приходится сталкиваться с багами в чужом софте, в том числе в антивирусных продуктах, или даже в самой ОС. Разрабатывать софт, который и в таких конфигурациях будет четко работать с железобетонной и неумолимой логикой, довольно тяжело. "Цветастость" багов зашкаливает, можно книгу писать
4
|
|||
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|
| 29.01.2017, 11:06 | |
|
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||
| 29.01.2017, 12:19 | ||||
|
Поэтому называть логгер баг хантером ну уж никак язык не поворачивается... Наверное кому что больше встречалось тот ту сторону и защищает
0
|
||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||||
| 30.01.2017, 12:42 | |||||||||||||||
|
вот есть некий уже собранный продукт. он стоит на руках пользователя. время от времени что-то глючит. что - не известно. пользователи ничего толком объяснить не могут. ваша задача - найти и исправить ошибки. ну и что вы будете делать? собирать софтинку на своей локальной машинке? а не факт, что на локальной машине этот баг вообще воспроизведётся как и что вы будете отлаживать? я просто почитаю логи, и буду знать, что происходило. потому что без логов вы не знаете, что на самом деле происходило у клиента. что бы что-то исправить, нужно сначала понять: что именно сломалось. можно просто почитать текст логов. а можно поиграть в телепата-нострадамуса. как вы своим дебегером будете отлаживать стрипованный релиз. и да, программисты вконтактика тоже используют логгирование. внезапно. и какают, наверное, вишенками. логгер ничего не знает о том, что делать в случае краша. он просто запускает аварийный скрипт. что в него записал программист - ему фиолетово.
это сбой. процесс уже умер.
1
|
|||||||||||||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||
| 30.01.2017, 12:53 | ||||
|
Опять же. Там где есть логирование - это место программист залогировал сам ибо понимал что проблемы могут быть в этом месте. Я же говорю о тех вещах где заранее неизвестно что может возникнуть проблема
0
|
||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 30.01.2017, 13:43 | ||||
|
основной процесс сообщает: "тред номер 1, запускаю функцию foo" сигнал получает сторожевик данного треда. он знает, что функция foo грубо говоря выполняется за доли секунды. если в течении 1 секунды основной процесс не отчитается о том, что foo успешно выполнена, сторожевик посчитает процесс в состоянии сбоя. все сторожевики сохраняют логи. и запускается аварийный скрипт. что бы выявлять вот эти заранее неизвестные места.
0
|
||||
| 30.01.2017, 14:36 | |
|
0
|
|
| 30.01.2017, 14:36 | |
|
Помогаю со студенческими работами здесь
49
Посоветуйте методы раскрутки для белого проекта Дисковод не читает пустые dvd-r/rw и пустые cd-rw диски. дебаг Дебаг процедуры
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|