Size: a a a

2021 March 15

АР

Андрей Руссков... in pro.cxx
koren
Нет. Всё действительно работает как задумано
вообще не факт. Может у тебя деструктор дважды вызывается где-то. Если в этом где-то был вектор, ты ловишь такую чепуху. Если там trivial структура, то ты просто не замечаешь разницы в наблюдаемом поведении. Но ошибка-то есть в обоих случаях
источник

АР

Андрей Руссков... in pro.cxx
а ежели "и так работает" значит и в отладке помощь не нужна, да? )
источник

k

koren in pro.cxx
Ilia Abernikhin
и попробую так сократить до конкретного поля структуры которое вызывает ошибку
При добавлении любого std::string в структуру оно начинает сбоить
источник

IZ

Ilia Zviagin in pro.cxx
Андрей Руссков
скорее всего ты просто спрятал ошибку под ковер и она вылезет в другом месте
+
источник

D

Danya in pro.cxx
koren
При добавлении любого std::string в структуру оно начинает сбоить
Короче дебаггером работать надо
источник

k

koren in pro.cxx
Danya
Короче дебаггером работать надо
Я и работаю вижловским
источник

D

Danya in pro.cxx
Можешь попробовать скомпилить под линух и пройтись ubsan
источник

АР

Андрей Руссков... in pro.cxx
koren
При добавлении любого std::string в структуру оно начинает сбоить
я могу посоветовать только перечитать мои советы выше
источник

IZ

Ilia Zviagin in pro.cxx
koren
При добавлении любого std::string в структуру оно начинает сбоить
Это просто у тебя проявляется проблема или нет, это не значит, что ты её исправил.
Очевидно, что все зависит от размера объекта
источник

АР

Андрей Руссков... in pro.cxx
кстати надо будет потом почистить этот тредик
источник

PK

Pavel Kazakov in pro.cxx
Danya
Можешь попробовать скомпилить под линух и пройтись ubsan
он не понимает, что едет по памяти, а ты советуешь пойти на другую ось с другими правилами :) ну так себе помощь
источник

IZ

Ilia Zviagin in pro.cxx
Андрей Руссков
кстати надо будет потом почистить этот тредик
Почему?
источник

IZ

Ilia Zviagin in pro.cxx
Pavel Kazakov
он не понимает, что едет по памяти, а ты советуешь пойти на другую ось с другими правилами :) ну так себе помощь
+
источник

АК

Александр Караев... in pro.cxx
koren
shader::TranslationState::~TranslationState(void)
mov         qword ptr [rsp+8],rcx
push        rdi
sub         rsp,20h
mov         rdi,rsp
mov         ecx,8
mov         eax,0CCCCCCCCh
rep stos    dword ptr [rdi]
mov         rcx,qword ptr [this]
mov         rax,qword ptr [this]
add         rax,60h
mov         rcx,rax
call        std::vector<unsigned int,std::allocator<unsigned int> >::~vector<unsigned int,std::allocator<unsigned int> > (07FF6C5C08C79h)
mov         rax,qword ptr [this]
add         rax,40h
mov         rcx,rax
call        std::vector<shader::VarToReg,std::allocator<shader::VarToReg> >::~vector<shader::VarToReg,std::allocator<shader::VarToReg> > (07FF6C5BCCCB5h)
mov         rax,qword ptr [this]
mov         rcx,rax
call        std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> > (07FF6C5BBF560h)
add         rsp,20h
pop         rdi

call        std::vector<unsigned int,std::allocator<unsigned int> >::~vector<unsigned int,std::allocator<unsigned int> > (07FF6C5C08C79h)
и вызывает вылет
ну вообще, судя по асм-коду,
std::vector<shader::VarToReg>::~vector вызывается на this+0x40
а
std::vector<unsigned int>::~vector на this+0x60

проверь, что offsetof(TranslationState, var_to_regs) - это 0x40
источник

АР

Андрей Руссков... in pro.cxx
потому что чат всё-таки не про помощь в отладке кода по стектрейсу
источник

k

koren in pro.cxx
Александр Караев
ну вообще, судя по асм-коду,
std::vector<shader::VarToReg>::~vector вызывается на this+0x40
а
std::vector<unsigned int>::~vector на this+0x60

проверь, что offsetof(TranslationState, var_to_regs) - это 0x40
Так оно и есть
источник

АР

Андрей Руссков... in pro.cxx
Александр Караев
ну вообще, судя по асм-коду,
std::vector<shader::VarToReg>::~vector вызывается на this+0x40
а
std::vector<unsigned int>::~vector на this+0x60

проверь, что offsetof(TranslationState, var_to_regs) - это 0x40
у меня тоже такая проблема. Часто пытаюсь искать ошибку слишком локально
источник

АР

Андрей Руссков... in pro.cxx
например лезу в корки хотя причина assert'а в логах есть )
источник

АК

Александр Караев... in pro.cxx
koren
Так оно и есть
это значит, что компилятор где-то по смещению 0x60 увидел std::vector<unsigned int>
возможны такие варианты:
1. он был там раньше и остался где-то в артефактах сборки
2. где-то нарушен ODR и есть структура с тем же именем
3. это баг компилятора
4. ???

предлагаю для начала целиком пересобрать проект, а потом в отладчике посмотреть получившийся лэйаут TranslationState

ещё можно понатыкать отладочных принтов с доступом к разным полям, чтобы понять, какие у них смещения (+ sizeof)
источник

АР

Андрей Руссков... in pro.cxx
я бы поставил на исключение в деструкторе
источник