Риск Вашего трафика, сниффингового на узле между Вашим ISP и местом назначения, является удаленным. Вы были бы один среди миллионов, и это берет нетривиальное количество вычислительной мощности на том уровне для выполнения проверки пакетов для идентификации пакетов, несущих данные для входа.
реальный риск в локальной сети, как на это указали. 2 наиболее распространенных сценария:
зараженный пользователь компьютера или злонамеренный пользователь используют приемы как отравление ARP для сниффинга всего незашифрованного трафика. Отравление ARP довольно непримечательно в сетях низкого трафика. В сетях интенсивного трафика это вызовет значимое снижение производительности и вероятность увеличений обнаружения. Эффективность ARP, отравляющего, возможно, уменьшенный прилежным сетевым разделением.
Кто-то имеет контроль над шлюзом. Это - вероятно, худший сценарий, поскольку весь интернет-трафик проходит через шлюз. В зависимости от того, насколько умный взломщик, это может быть очень трудно обнаружить.
SSL принимает меры против сниффинга, и он имеет другое преимущество, о котором Вы не могли бы знать: SSL позволяет Вам быть уверенным, что объект, получающий Ваши пароли и другие детали, - то, кто Вы думаете, что это.
, Если говорят, Вы были жертвой отравления DNS, где кто-то перенаправляет Вас на злонамеренный сайт, который точно походит на законный веб-сайт, у Вас не было бы способа знать. С SSL Вы получили бы предупреждение/ошибку, что сайт не имеет действительного сертификата, который предупредил бы Вас, что все не, как это должно быть.
Лично я адаптирую свои пароли в соответствии с тем, перемещается ли информация по HTTPS. Я делаю это, потому что неизбежно, что в конечном счете мне будет нужен вход в систему по HTTP в небезопасной сети.
Очевидно, вам следует реорганизовать эту функцию, но в C ++ вы можете использовать этот простой прием, чтобы справиться с этим за пять минут:
class ReturnMarker
{
public:
ReturnMarker() {};
~ReturnMarker()
{
dummy += 1; //<-- put your breakpoint here
}
static int dummy;
}
int ReturnMarker::dummy = 0;
, а затем добавьте один ReturnMarker в верхней части вашей функции . Когда он вернется, этот экземпляр выйдет из области видимости, и вы попадете в деструктор.
void LongFunction()
{
ReturnMarker foo;
// ...
}
Похоже, пора реорганизовать LongFunction () ...
Функция 1000 строк - плохой запах кода. Потратьте время на его рефакторинг в более мелкие, более удобные в обслуживании функции. Вы обнаружите ошибку (-ы), пока будете исправлены, и это будет выгодным вложением в будущее.
Это C или C ++?
Если C ++, создайте новый класс, который обертывает bool (например, CMyBool), с автоматическим преобразованием в bool.
Теперь LongFunction возвращает CMyBool (быстрый поиск и замена изменят все возвращаемые значения в LongFuntion на «return CMyBool (x)».
Теперь установите точку останова в ctor для CMyBool, отладчик теперь остановится при создании CMyBool, который будет на правильный оператор return в LongFunction.
Автоматическое приведение к типу bool не позволит CMyBool нарушить код, использующий CMyBool.
Это решит исходную проблему, но более серьезная проблема заключается в том, что LongFunction необходимо реорганизовать.
12122] Надеюсь, это поможет.
Может помочь разделение слоев. Часто настройка машины для работы с БД довольно специфична, так что это разумное первое усилие.
Однако, если у вас есть два типа действий пользователя, один из которых очень тяжелый, вы всегда рискуете получить несколько активных пользователей повредили остальному населению.
Вы можете учесть два момента:
Вы не сказали, на какой платформе вы находитесь. В зависимости от содержимого LongFunction
я бы подошел к этому с помощью gdb:
Предположим, что ваш файл 'f.cc' содержит следующие строки:
1: bool LongFunction () { /* ... */ }
2:
3: void bar ()
4: {
5: bool bSuccess = LongFunction ();
6: assert (bSuccess);
7: }
Вот шаги в gdb:
Добавить точку останова в той же строке, что и утверждение: break f.cc:6
Добавить условие к этой точке останова, когда bSuccess ложно: условие 1 (bSuccess == 0 )
Запускайте вашу программу до тех пор, пока не будет достигнута эта точка останова.
Установите точку останова в начале тела функции: break f.cc:4[1220estive Перейти обратно в это место (и он остановится в точка останова):
jump f.cc:4
Удалите содержимое LongFunction, чтобы понять, почему он не работает.
Причина, по которой я говорю, что это зависит от содержимого LongFunction, заключается в том, что если LongFunction считывает ввод из потока или изменяет глобальные переменные и т.д., то его поведение во второй раз может быть другим. Вы должны рассматривать вышеупомянутые шаги как такие же, как если бы код был:
3: void bar ()
4: {
5: bool bSuccess = LongFunction ();
5: bSuccess = LongFunction ();
6: assert (bSuccess);
7: }
В Visual Studio я бы поставил точку останова на утверждение, затем, используя окно трассировки стека, щелкните следующую строку вверх, и вы попадете в точку выхода метода.
#define return { TRACE(LINE); return; }
Это решает вашу проблему 4.
Что касается остального, то это просто проблема с кодированием. Вот почему многие системы возвращают более сложные ошибки (такие как HRESULT от COM-объекта) и / или спамят что-то в потоке отладки при возникновении проблемы.
Тем не менее, функция 1000 строк должна быть отражена. Как вы видите, длинная функция оказывается невероятно сложной в обслуживании.
Изменить: Будет ли следующее работать лучше, чем приведенное выше?
#define return TRACE(LINE), return
Вы выпили несколько напитков, так что это вполне может не быть.
«Я, наверное, мог бы отлаживать его шаг за шагом, это работает, но требует много времени, мы этого не делаем» не зная ТОЧНО, что функция делает и должна делать.
И как вы собираетесь это сделать, не переходя через функцию? Я думал, что для этого нужна IDE с хорошим отладчиком.
Откровенно говоря, я нахожу этот вопрос почти юмористическим в очень грустной форме.
не зная ТОЧНО, что функция делает и должна делать.И как вы собираетесь это сделать, не переходя через функцию? Я думал, что для этого нужна IDE с хорошим отладчиком.
Откровенно говоря, я нахожу этот вопрос почти юмористическим в очень грустной форме.
В 1982 году мне было поручено исправить неработающую программу блок-схемы. Программа, написанная на машинно-зависимом фортране Harris (сейчас я не помню, была ли она на FORTRAN IV или FORTRAN 77), состояла из основной программы из 1100 строк, подпрограммы из 900 строк и примерно дюжины подпрограмм, каждая из которых была От 10 до 20 строк.
Да, и в программе почти не было пробелов (пустых строк), а комментарии вообще бесполезны.
Мне потребовалось 160 часов - четыре недели, ПОЛНОЕ ВРЕМЯ, с У меня на столе больше НИЧЕГО - разобраться в этом коде, чтобы произвести надлежащий ремонт.
Вы находитесь в похожей ситуации. С вашей стороны потребуются реальные затраты процессорного времени, чтобы разобраться в этом существе с 1000 строками, достаточно хорошо, чтобы понять, что все может пойти не так, и что делать, чтобы это исправить.
вернуть достаточно просто. Для Microsoft AbysmalC ++: найдите каждый экземпляр «return» и добавьте к нему предисловие
«printf (" \ n \ n --- >>> вставка в строке% d \ n \ n ", __LINE __);"
(или аналогичный в вашей системе). Очевидно, вы не можете делать это автоматически; вам нужно будет посмотреть на локальный брекетинг. Затем запустите свой тест и посмотрите, куда он скажет вам смотреть.
Дело в том, что в реальном мире вычислений почти нет реальных подпрограмм, длина которых действительно должна составлять 1000 строк. За почти 40 лет в этой рэкете, как студент и профессионал, я столкнулся ровно с одной рутиной, которая ДОЛЖНА была быть длиннее одной печатной страницы (около 60 строк), и это был особый случай. Всего было около трех страниц.
С другой стороны, я видел МНОГО отработанных модулей, где парень, который написал это, был слишком ленив или слишком некомпетентен, чтобы должным образом разложить его, а программисты были слишком ленивы, слишком некомпетентны или слишком напуганы своим менеджером, чтобы вернуться и реорганизовать его.
Наконец: Учтите, что вероятно, это будет не последний раз, когда кто-то будет работать над этим модулем, и, возможно, это не последний раз, когда ВАМ придется работать над ним. Такие вещи, как правило, являются смолистыми младенцами: прикоснувшись к ним, вы никогда не оторветесь от них. Возможно, вам стоит потратить хотя бы время на рефакторинг и, вполне возможно, переделать / переписать его ОТ SCRATCH и первых принципов.
Учтите, что это, вероятно, будет не последний раз, когда кто-то будет работать над этим модулем, и, возможно, это будет не последний раз, когда ВАМ придется работать над ним. Такие вещи, как правило, являются смолистыми младенцами: прикоснувшись к ним, вы никогда не оторветесь от них. Возможно, вам стоит потратить хотя бы время на рефакторинг и, вполне возможно, переделать / переписать его ОТ SCRATCH и первых принципов. Учтите, что это, вероятно, будет не последний раз, когда кто-то будет работать над этим модулем, и, возможно, это будет не последний раз, когда ВАМ придется работать над ним. Такие вещи, как правило, являются смолистыми младенцами: прикоснувшись к ним, вы никогда не оторветесь от них. Возможно, вам стоит потратить хотя бы время на рефакторинг и, вполне возможно, переделать / переписать его ОТ SCRATCH и первых принципов.