
Berkus
09.05.2017
13:33:19
(или N/4 интов или еще любая поебень)
когда ты кусок памяти так интерпретируешь то intel endianness превратит твой тип в фарш

Evgeniy
09.05.2017
13:34:09

Александр
09.05.2017
13:35:07

Google

Evgeniy
09.05.2017
13:35:38

Александр
09.05.2017
13:36:18

Andrei
09.05.2017
13:36:40
Хотя ощущение такое, что и правда легче написать обёртку, которая держит референс на объект и даёт интерфейс к битам

Evgeniy
09.05.2017
13:37:49
потому что я понял что нужные операции с битами, т.е. set, reset, flip

Александр
09.05.2017
13:38:18
to_string - конечно. Для отладки не помешает

Evgeniy
09.05.2017
13:39:17

Александр
09.05.2017
13:39:33

Evgeniy
09.05.2017
13:39:34

Александр
09.05.2017
13:39:58

Google

Alexander
09.05.2017
13:44:18

Evgeniy
09.05.2017
13:45:37

Alexander
09.05.2017
13:46:26
gdb
Удачи отлаживать многопоточный код ?
который взаимодействует с системными процессами, в которые не залезешь дебаггером
у меня был пренеприятнейший опыт, и только принтфы спасли

Berkus
09.05.2017
13:47:31
anecdotal evidence?

Evgeniy
09.05.2017
13:53:04

Alexander
09.05.2017
13:53:41

ovf
09.05.2017
13:54:37
принтфы рулят. можно ещё пописать своих принтфов. например, (раз уж у вас тут у всех 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
09.05.2017
14:04:18
Принтфы запросто ломают воспроизведение бага.
А вот assert-ы куда менее инвазивны

ovf
09.05.2017
14:05:32
извини, а чем assert отличается от printf(int)?

Andrei
09.05.2017
14:07:00
тем что printf запустит огромную машинерию про преобразования твоего инта в строку, потом запись в консоль и пошло поехало. Огромные задержки. Многопоточные баги запросто перестанут воспроизводиться. А ассёрт, это просто проверка условия и если фейл, то сразу INT 3
Гораздо менее инвазивно, я же сказал.

Grigor
09.05.2017
14:07:36
надо чтобы на гонках не работало и тогда отлаживаться принтами ок

ovf
09.05.2017
14:07:52
int 3 -- то есть у тебя к процессу подключён дебаггер. и что там про инвазивность?

Grigor
09.05.2017
14:07:53
и чепятать надо в другом треде
тогда и гонка ок воспроизводится

Andrei
09.05.2017
14:08:42

Grigor
09.05.2017
14:08:57
у меня нет винды ;D

Google

Andrei
09.05.2017
14:09:03
И вообще в целом на винде гораздо комфортнее отлаживаться в студийном дебагере, по сравнению с gdb
На линуксах я бы еще подумал. Но всё равно, я предпочитаю отладку assert-ами

Grigor
09.05.2017
14:09:33
в силайоне же вроде бы приличное что-то для отладки наворотили?

Alexander
09.05.2017
14:09:45

ovf
09.05.2017
14:09:48
не понял, при чём тут винда.

Andrei
09.05.2017
14:10:00

Alexander
09.05.2017
14:10:10

Evgeniy
09.05.2017
14:10:10

Alexander
09.05.2017
14:10:18

Andrei
09.05.2017
14:10:20

Grigor
09.05.2017
14:10:24
ну у меня в нем и проект-то не собирался ;D

Evgeniy
09.05.2017
14:10:34
может через пару лет, если тщательно репортить и фичреквестить

ovf
09.05.2017
14:10:49
и у этого отличного отладчика какой-то отличный от других оверхед?

Grigor
09.05.2017
14:10:52
принты ван лав

Andrei
09.05.2017
14:11:16

Grigor
09.05.2017
14:11:47
кстати, аргумент за принты, иногда с дебажными символами просто невозможно собрать проект, линкер берет и говорит тебе oom

Дед Пегас
09.05.2017
14:12:30
У студийного отладчика есть один очень крупный плюс — он не тормозит на ооочень больших файлах.

Andrei
09.05.2017
14:12:33

ovf
09.05.2017
14:12:34
по моим ощущениям, мы обсуждаем (зачем-то, мне эта тема не то чтобы сильно интересна) сравнительный оверхед printf и подключённого дебаггера

Дед Пегас
09.05.2017
14:12:37
С gdb приходится изгаляться.

Google

Evgeniy
09.05.2017
14:12:37

Alexander
09.05.2017
14:12:50

Grigor
09.05.2017
14:13:06

ovf
09.05.2017
14:13:10
какое отношение символы имеют к отладчику?

Alexander
09.05.2017
14:13:15

ovf
09.05.2017
14:13:34

Andrei
09.05.2017
14:13:37

Evgeniy
09.05.2017
14:13:44

ovf
09.05.2017
14:14:13
по-моему, мы разные вещи называем "подключением"

Admin
ERROR: S client not available

Grigor
09.05.2017
14:14:19
в студии 32-битный линкер? ?
got no idea about vs. а у нас есть реальные платформы, где надо собирать 32 тулчейном и с дебажными символами там oom

Andrei
09.05.2017
14:14:23
Ага помню, у кого-то пробелмы были собрать 65536 объектников :D

ovf
09.05.2017
14:14:44
чтобы по int 3 произошло что-то хорошее, твой процесс уже должен выполняться под управлением отладчика

Evgeniy
09.05.2017
14:14:46

Andrei
09.05.2017
14:15:03
Естественно там не int 3
>тем что printf запустит огромную машинерию про преобразования твоего инта в строку, потом запись в консоль и пошло поехало. Огромные задержки. Многопоточные баги запросто перестанут воспроизводиться. А ассёрт, это просто проверка условия и если фейл, то сразу break

ovf
09.05.2017
14:16:18
break куда?
если отладчика нет

Google

ovf
09.05.2017
14:17:25
хинт: перед printf можно тоже проверить условие, если хочется

Andrei
09.05.2017
14:17:42
Не уверен как на линуксе, но на винде можно на лету подключить отладчик

ovf
09.05.2017
14:18:05
как ты догадываешься, это очень даже не бесплатно
если ты готов сколько угодно потратить времени на такое, у тебя точно есть время напечатать на экран

Andrei
09.05.2017
14:19:07
Печать на экран — это всегда недостаточно. Мне надо посмотреть на стек, мне надо посмотреть в переменные.
Одним лишь принтом получить информацию о стейте программы — тяжело.

Berkus
09.05.2017
14:19:36
печатай стектрейсы

Alexander
09.05.2017
14:19:39

Александр
09.05.2017
14:19:42
Вместе с @berkus разобрались в тонкостях стандартной библиотеки и выявили суть бага :) и дело не в оптимизациях компилятора, а в конкретной реализации bitset с некоторыми хитростями. За объяснение ему огромное спасибо

Alexander
09.05.2017
14:19:47
на линуксе тоже можно

ovf
09.05.2017
14:20:07
напомню то утверждение, которое мы обсуждаем
Принтфы запросто ломают воспроизведение бага.
А вот assert-ы куда менее инвазивны

Andrei
09.05.2017
14:20:11
печатай стектрейсы
Об этом и речь, что если я буду печатать стектрейсы — я поменяю профиль нагрузки.

Berkus
09.05.2017
14:20:15

Alexander
09.05.2017
14:20:36
а для стектрейсов нам подходит... Boost.Stacktrace :)

Andrei
09.05.2017
14:21:07

Alexander
09.05.2017
14:21:22

Berkus
09.05.2017
14:22:10
надо было сразу буст использовать!

ovf
09.05.2017
14:22:32
а когда в c++ добавят до кучи гуй, приложения на этом ужасе тоже будут "без 3rd party"?

Alexander
09.05.2017
14:25:44

ovf
09.05.2017
14:26:33
зачем мне его ждать?