Крашится в дебаг версии, в релизе ОК

Есть пакет в протобуфе. Все ок в если проект собирать в релизе. Если в дебаг версии - крашится сервер. Все поля имеются. response_ptr задан. header проинициализирован.

строкчка кода на которой крашится:

header_ptr->set_length(response_ptr->ByteSizeLong());


Thread 3 "appchat-server" received signal SIGSEGV, Segmentation fault.
google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize (unknown_fields=...) at google/protobuf/wire_format.cc:271
271 google/protobuf/wire_format.cc: Нет такого файла или каталога.

Почему же в релизе все хорошо работает? И чем лечить?

update: я изменил немного код:

std::vector<uint8_t> MsgFactory::serialize_response(ptr_header_t&& header_ptr, ptr_proto_response_t&& response_ptr) {
        if (header_ptr && response_ptr) {
            size_t byteSize = response_ptr->ByteSizeLong();
            std::vector<uint8_t> bin_buffer;
            bin_buffer.resize(SIZE_HEADER + byteSize);
            header_ptr->set_length(byteSize);
            header_ptr->SerializeToArray(bin_buffer.data(), SIZE_HEADER);
            response_ptr->SerializeToArray(bin_buffer.data() + SIZE_HEADER, static_cast<int>(byteSize));

            return bin_buffer;
        }
        return std::vector<uint8_t>();
    }

Что странно крашится стало на следующей строке.

gdb:

Thread 3 "appchat-server" hit Breakpoint 1, Protocol::MsgFactory::serialize_response (header_ptr=..., response_ptr=...)
    at /home/focus/WS/Dev/AppChat/appchat/src/protocol/include/protocol/msgfactory.cpp:162
162             bin_buffer.resize(SIZE_HEADER + byteSize);
(gdb) info locals
bin_buffer = <optimized out>
byteSize = 13
(gdb) n
163             header_ptr->set_length(byteSize);
(gdb) n
163             header_ptr->set_length(byteSize);
(gdb) n
164             header_ptr->SerializeToArray(bin_buffer.data(), SIZE_HEADER);
(gdb) n

Thread 3 "appchat-server" received signal SIGSEGV, Segmentation fault.
0x00007ffff726d775 in google::protobuf::MessageLite::SerializePartialToArray(void*, int) const () at google/protobuf/message_lite.cc:484
484 google/protobuf/message_lite.cc: Нет такого файла или каталога.





163             header_ptr->set_length(byteSize);
(gdb) s
Serialize::Header::set_length (this=0x7fffe4001ab0, value=13) at /home/focus/WS/Dev/AppChat/appchat/src/protocol/include/protocol/msgfactory.cpp:163
163             header_ptr->set_length(byteSize);
(gdb) s
Serialize::Header::_internal_set_length (this=0x7fffe4001ab0, value=13) at /home/focus/WS/Dev/AppChat/build/src/protocol/messages.pb.h:478
478   length_ = value;
(gdb) s
Protocol::MsgFactory::serialize_response (header_ptr=..., response_ptr=...) at /home/focus/WS/Dev/AppChat/appchat/src/protocol/include/protocol/msgfactory.cpp:164
164             header_ptr->SerializeToArray(bin_buffer.data(), SIZE_HEADER);
(gdb) s
std::__cxx1998::vector<unsigned char, std::allocator<unsigned char> >::data (this=0x7ffff57d3918)
    at /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/stl_vector.h:1169
1169          { return _M_data_ptr(this->_M_impl._M_start); }
(gdb) s
Protocol::MsgFactory::serialize_response (header_ptr=..., response_ptr=...) at /home/focus/WS/Dev/AppChat/appchat/src/protocol/include/protocol/msgfactory.cpp:164
164             header_ptr->SerializeToArray(bin_buffer.data(), SIZE_HEADER);
(gdb) s
google::protobuf::MessageLite::SerializeToArray (this=0x7fffe4001ab0, data=0x7fffe4001ab0, size=19) at google/protobuf/message_lite.cc:481
481 google/protobuf/message_lite.cc: Нет такого файла или каталога.

Ответы (0 шт):