Крашится в дебаг версии, в релизе ОК
Есть пакет в протобуфе. Все ок в если проект собирать в релизе. Если в дебаг версии - крашится сервер. Все поля имеются. 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: Нет такого файла или каталога.