Evgenii
to_string - конечно. Для отладки не помешает
а тип в котором данные лежат распечатать нельзя?
Evgenii
to_string - конечно. Для отладки не помешает
и вообще, ты что, дебажишь принтами?
Александр
и вообще, ты что, дебажишь принтами?
Не придирайся. Логгирование никто не отменял
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
int 3 -- то есть у тебя к процессу подключён дебаггер. и что там про инвазивность?
у меня на винде есть ::DebugBreak, и отладчик можно на лету подключить.
Danil
у меня нет винды ;D
Andrei
И вообще в целом на винде гораздо комфортнее отлаживаться в студийном дебагере, по сравнению с gdb
Andrei
На линуксах я бы еще подумал. Но всё равно, я предпочитаю отладку assert-ами
Danil
в силайоне же вроде бы приличное что-то для отладки наворотили?
ovf
не понял, при чём тут винда.
Andrei
в силайоне же вроде бы приличное что-то для отладки наворотили?
Может быть сейчас и наворотили, но к тому моменту, когда я его дропнул, там было отвратно.
Andrei
не понял, при чём тут винда.
При том, что у студии отличный отладчик.
Danil
ну у меня в нем и проект-то не собирался ;D
Evgenii
может через пару лет, если тщательно репортить и фичреквестить
ovf
и у этого отличного отладчика какой-то отличный от других оверхед?
Danil
принты ван лав
Andrei
и у этого отличного отладчика какой-то отличный от других оверхед?
Ты сейчас обсуждаешь printf vs debug или ищешь очередной повод прикопаться к так называемым проблемам со студией? :D
Danil
кстати, аргумент за принты, иногда с дебажными символами просто невозможно собрать проект, линкер берет и говорит тебе oom
Крылатый
У студийного отладчика есть один очень крупный плюс — он не тормозит на ооочень больших файлах.
Andrei
и у этого отличного отладчика какой-то отличный от других оверхед?
Какая разница, какой у отладчика оверхед, скажи мне? Под отладкой у тебя и так всё остановлено и ты пристально разглядываешь монитор.
ovf
по моим ощущениям, мы обсуждаем (зачем-то, мне эта тема не то чтобы сильно интересна) сравнительный оверхед printf и подключённого дебаггера
Крылатый
С gdb приходится изгаляться.
Danil
докинь плашку
не помогает, линкеру разрядности не хватает)
ovf
какое отношение символы имеют к отладчику?
Andrei
по моим ощущениям, мы обсуждаем (зачем-то, мне эта тема не то чтобы сильно интересна) сравнительный оверхед printf и подключённого дебаггера
Ты, видимо, проигнорировал то, что я написал. assert внутри себя вызывает debugbreak и только тогда ты подключаешь отладчик.
Evgenii
ovf
по-моему, мы разные вещи называем "подключением"
Danil
в студии 32-битный линкер? 😒
got no idea about vs. а у нас есть реальные платформы, где надо собирать 32 тулчейном и с дебажными символами там oom
Andrei
Ага помню, у кого-то пробелмы были собрать 65536 объектников :D
ovf
чтобы по int 3 произошло что-то хорошее, твой процесс уже должен выполняться под управлением отладчика
Andrei
Естественно там не int 3
Andrei
>тем что printf запустит огромную машинерию про преобразования твоего инта в строку, потом запись в консоль и пошло поехало. Огромные задержки. Многопоточные баги запросто перестанут воспроизводиться. А ассёрт, это просто проверка условия и если фейл, то сразу break
ovf
break куда?
ovf
если отладчика нет
ovf
хинт: перед printf можно тоже проверить условие, если хочется
Andrei
Не уверен как на линуксе, но на винде можно на лету подключить отладчик
ovf
как ты догадываешься, это очень даже не бесплатно
ovf
если ты готов сколько угодно потратить времени на такое, у тебя точно есть время напечатать на экран
Andrei
Печать на экран — это всегда недостаточно. Мне надо посмотреть на стек, мне надо посмотреть в переменные.
Andrei
Одним лишь принтом получить информацию о стейте программы — тяжело.
Berkus
печатай стектрейсы
Александр
Вместе с @berkus разобрались в тонкостях стандартной библиотеки и выявили суть бага :) и дело не в оптимизациях компилятора, а в конкретной реализации bitset с некоторыми хитростями. За объяснение ему огромное спасибо
ovf
напомню то утверждение, которое мы обсуждаем
ovf
Принтфы запросто ломают воспроизведение бага.
ovf
А вот assert-ы куда менее инвазивны
Andrei
печатай стектрейсы
Об этом и речь, что если я буду печатать стектрейсы — я поменяю профиль нагрузки.
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-ами» — это узкое мышление.