Александр
Evgenii
Evgenii
gdb
Berkus
anecdotal evidence?
Evgenii
конечно есть разные ситуации, но большинство людей используют принты потому что могут, а не потому что по другому никак
ovf
принтфы рулят. можно ещё пописать своих принтфов. например, (раз уж у вас тут у всех c++) для сложных выражений очень полезна функция типа template<typename t>t debug_print(const char*s,t x){std::cerr<<s<<": "<<x<<"\n";return x;}. можно использовать в середине любого выражения, обернув то, что хочется вывести в debug_print(...). bonus points -- #define debug_print(x) debug_print(#x,x)
Andrei
Принтфы запросто ломают воспроизведение бага.
Andrei
А вот assert-ы куда менее инвазивны
ovf
извини, а чем assert отличается от printf(int)?
Andrei
тем что printf запустит огромную машинерию про преобразования твоего инта в строку, потом запись в консоль и пошло поехало. Огромные задержки. Многопоточные баги запросто перестанут воспроизводиться. А ассёрт, это просто проверка условия и если фейл, то сразу INT 3
Andrei
Гораздо менее инвазивно, я же сказал.
Danil
надо чтобы на гонках не работало и тогда отлаживаться принтами ок
ovf
int 3 -- то есть у тебя к процессу подключён дебаггер. и что там про инвазивность?
Danil
и чепятать надо в другом треде
Danil
тогда и гонка ок воспроизводится
Andrei
Danil
у меня нет винды ;D
Andrei
И вообще в целом на винде гораздо комфортнее отлаживаться в студийном дебагере, по сравнению с gdb
Andrei
На линуксах я бы еще подумал. Но всё равно, я предпочитаю отладку assert-ами
Danil
в силайоне же вроде бы приличное что-то для отладки наворотили?
ovf
не понял, при чём тут винда.
Evgenii
Danil
ну у меня в нем и проект-то не собирался ;D
Evgenii
может через пару лет, если тщательно репортить и фичреквестить
ovf
и у этого отличного отладчика какой-то отличный от других оверхед?
Danil
принты ван лав
Danil
кстати, аргумент за принты, иногда с дебажными символами просто невозможно собрать проект, линкер берет и говорит тебе oom
Крылатый
У студийного отладчика есть один очень крупный плюс — он не тормозит на ооочень больших файлах.
ovf
по моим ощущениям, мы обсуждаем (зачем-то, мне эта тема не то чтобы сильно интересна) сравнительный оверхед printf и подключённого дебаггера
Крылатый
С gdb приходится изгаляться.
Evgenii
ovf
какое отношение символы имеют к отладчику?
ovf
Andrei
Evgenii
ovf
по-моему, мы разные вещи называем "подключением"
Danil
в студии 32-битный линкер? 😒
got no idea about vs. а у нас есть реальные платформы, где надо собирать 32 тулчейном и с дебажными символами там oom
Andrei
Ага помню, у кого-то пробелмы были собрать 65536 объектников :D
ovf
чтобы по int 3 произошло что-то хорошее, твой процесс уже должен выполняться под управлением отладчика
Evgenii
Andrei
Andrei
Естественно там не int 3
Andrei
>тем что printf запустит огромную машинерию про преобразования твоего инта в строку, потом запись в консоль и пошло поехало. Огромные задержки. Многопоточные баги запросто перестанут воспроизводиться. А ассёрт, это просто проверка условия и если фейл, то сразу break
ovf
break куда?
ovf
если отладчика нет
ovf
хинт: перед printf можно тоже проверить условие, если хочется
Andrei
Не уверен как на линуксе, но на винде можно на лету подключить отладчик
ovf
как ты догадываешься, это очень даже не бесплатно
ovf
если ты готов сколько угодно потратить времени на такое, у тебя точно есть время напечатать на экран
Andrei
Печать на экран — это всегда недостаточно. Мне надо посмотреть на стек, мне надо посмотреть в переменные.
Andrei
Одним лишь принтом получить информацию о стейте программы — тяжело.
Berkus
печатай стектрейсы
Александр
Вместе с @berkus разобрались в тонкостях стандартной библиотеки и выявили суть бага :) и дело не в оптимизациях компилятора, а в конкретной реализации bitset с некоторыми хитростями. За объяснение ему огромное спасибо
ovf
напомню то утверждение, которое мы обсуждаем
ovf
Принтфы запросто ломают воспроизведение бага.
ovf
А вот assert-ы куда менее инвазивны
Andrei
печатай стектрейсы
Об этом и речь, что если я буду печатать стектрейсы — я поменяю профиль нагрузки.
Berkus
Andrei
Отлично! у меня приложение без 3rd party, давайте в него еще буст притараканим для отладки :D
Berkus
надо было сразу буст использовать!
ovf
а когда в c++ добавят до кучи гуй, приложения на этом ужасе тоже будут "без 3rd party"?
ovf
зачем мне его ждать?
ovf
думаю, ответ на мой вопрос не изменится от наступления этого радостного события.
Andrei
А вообще мне интересно посмотреть на любителей отлаживаться printf-ами в большом проекте, где надо каждый раз перекомпилироваться после добавления printfa нового.
Andrei
Отдельный вопрос как printf-ами segfault ловить.
Andrei
Всё еще хуже чем вообще отсутсвие перекомпиляции.
Andrei
Пока ждешь пусть даже небольшую но перекомпиляцию а не просто перезапускаешь программу — тратишь ментальную энергию и концентрацию.
Andrei
Отвлекаешься на написание printf-ов, потом на их убирание.
Andrei
Имеют самое прямое.
Andrei
Можно сколько угодно открещиваться от этого, но такая штука как концентрация, скорость работы они есть. И я лично был свидетелем, как человек тыкаясь в printf-ы и gdb не мог отладиться потому, что все это занимало кучу времени.
Andrei
И замусоривало код очень быстро.
Andrei
Я тоже не говорил, что отладчик — серебрянная пуля.
Andrei
Я говорил о том, что «оталживаюсь только printf-ами» — это узкое мышление.