2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||||||
1 | ||||||
Пустые дебаг методы vs полное выпиливание с проекта26.01.2017, 20:57. Показов 2381. Ответов 48
Метки нет (Все метки)
Добрый вечер,
Моё мнение: если макрос - то особо не поиграться с шаблонами и отсутствие статического проверки типа если методы пустышки - то будет ли создаваться под них стек и вызов, или компилятор с оптимизирует всё это дело?
0
|
26.01.2017, 20:57 | |
Ответы с готовыми решениями:
48
Полное имя файла из проекта Пустые методы в перечислении java.util.concurrent.TimeUnit Выпиливание экземпляра класса самим собой Посоветуйте методы раскрутки для белого проекта |
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
28.01.2017, 23:38 [ТС] | 42 |
Не встречал в своей практике приложение, что является сервером в том смысле в каком оно есть для многих. Как правило, это дата-центр с кучей компов, который арендует фирма. Но чтобы клиент установивший ваш софт называл свою комнату серверной? нет. Не встречал.
0
|
Ушел с форума
|
|
29.01.2017, 10:55 | 43 |
Я не соглашусь. Категорично.
Да, логи, даже очень подробные и хорошо продуманные, далеко не всегда могут точно указать на функцию и номер строки в ней, в которой произошел сбой. Но они позволяют мысленно проследить ход выполнения программы и дойти до этой точки или хотя бы примерно до того места, где был сбой. Вот пример: при работе сервера один из его рабочих потоков начал грузить процессор и "зациклился", сервер перестал отвечать на команды и пришлось прибить его из диспетчера задач. Вот кусок лога: 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 | 44 |
0
|
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
|
|
29.01.2017, 12:19 | 45 |
Ага, это моя основная мысль.
Да, именно такие моменты я называю "побочными эффектами", у меня тоже такое бывало, только в 9 из 10 случаев обычно я знал "вот тут мне нужен лог" потому что понимал могут быть проблемы в этом месте и нужно это отслеживать. Поэтому называть логгер баг хантером ну уж никак язык не поворачивается... Наверное кому что больше встречалось тот ту сторону и защищает )))
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
30.01.2017, 12:42 | 46 | |||||
вы вообще когда нибудь имели дело с боевым проектом?
вот есть некий уже собранный продукт. он стоит на руках пользователя. время от времени что-то глючит. что - не известно. пользователи ничего толком объяснить не могут. ваша задача - найти и исправить ошибки. ну и что вы будете делать? собирать софтинку на своей локальной машинке? а не факт, что на локальной машине этот баг вообще воспроизведётся как и что вы будете отлаживать? я просто почитаю логи, и буду знать, что происходило. вы даже примерно не знаете, ни где искать, ни что искать. потому что без логов вы не знаете, что на самом деле происходило у клиента. именно для исправления ошибок логи и нужны. что бы что-то исправить, нужно сначала понять: что именно сломалось. можно просто почитать текст логов. а можно поиграть в телепата-нострадамуса. к чему вообще вопрос? вы мне до сих пор не смогли объяснить, как вы своим дебегером будете отлаживать стрипованный релиз. и какое отношения этот поток сознания имеет к теме логирования? и да, программисты вконтактика тоже используют логгирование. внезапно. аха, и никогда не ошибаются. и какают, наверное, вишенками. он решает одну задачу - логгирует. логгер ничего не знает о том, что делать в случае краша. он просто запускает аварийный скрипт. что в него записал программист - ему фиолетово.
это сбой. процесс уже умер.
1
|
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
|
|
30.01.2017, 12:53 | 47 |
Это был риторический вопрос. Он был к тому, что ошибка может произойти не по причине бага а из за проблем самой машины(например нет места на диске, программа не виновата).
и как он запускает этот скрипт, если вы запускаете логгер как отдельный процесс следящий за основным? Опять же. Там где есть логирование - это место программист залогировал сам ибо понимал что проблемы могут быть в этом месте. Я же говорю о тех вещах где заранее неизвестно что может возникнуть проблема
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
30.01.2017, 13:43 | 48 |
какая разница?
отдельный процесс на каждый тред. основной процесс сообщает: "тред номер 1, запускаю функцию foo" сигнал получает сторожевик данного треда. он знает, что функция foo грубо говоря выполняется за доли секунды. если в течении 1 секунды основной процесс не отчитается о том, что foo успешно выполнена, сторожевик посчитает процесс в состоянии сбоя. все сторожевики сохраняют логи. и запускается аварийный скрипт. логгирование для того и нужно, что бы выявлять вот эти заранее неизвестные места.
0
|
Raali
|
30.01.2017, 14:36
Пустые дебаг методы vs полное выпиливание с проекта
#49
|
0
|
30.01.2017, 14:36 | |
Дисковод не читает пустые dvd-r/rw и пустые cd-rw диски. дебаг Дебаг процедуры Дебаг в Chrome Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |