Есть уже некоторые подходы к этому вопросу. ¹² ³Сегментация Неисправность возникает, если нет std :: flush
Но этот совершенно другой! Если я прокомментирую строку std::flush
, произойдет Segfault, но если я добавлю эту строку, ошибка сегментации не произойдет!
int Stm32Serial::writeToSerial()
{
/// TODO Write handle for writing if necessary
/// int serial_write_ret;
if (USE_USB)
{
usb_port.writeBytes (stm_buf_t, stm_buf_t[LENGTH_INDEX]);
return SERIAL_RET;
}
else
{
std::cout << std::flush; // TODO HACK Remove it!
serial_port.sendBuff (stm_buf_t, stm_buf_t[LENGTH_INDEX]);
return SERIAL_RET;
}
}
Также я попробовал gdb
; Я использую эту функцию в ROS с this техникой отладки и compiling with -g option, но не печатает имена функций
Program received signal SIGSEGV, Segmentation fault.
__mempcpy_sse2() at ../sysdeps/x86_64/memcpy.S:142
142 ../sysdeps/x86_64/memcpy.S: No such file or directory.
(gdb) bt
#0 __mempcpy_sse2() at ../sysdeps/x86_64/memcpy.S:142
#1 0x6564656563786520 in ??()
#2 0x20726f7272652064 in ??()
#3 0x6c6f687365726874 in ??()
#4 0x2e30203a79622064 in ??()
#5 0x202c323537373431 in ??()
#6 0x697420656c637963 in ??()
#7 0x36312e30203a656d in ??()
#8 0x2c31343936373632 in ??()
#9 0x6f68736572687420 in ??()
#10 0x32302e30203a646c in ??()
#11 0x742064616572202c in ??()
#12 0x312e30203a656d69 in ??()
#13 0x3530333430353233 in ??()
#14 0x657461647075202c in ??()
#15 0x30203a656d697420 in ??()
#16 0x373430353233312e in ??()
#17 0x74697277202c3234 in ??()
#18 0x203a656d69742065 in ??()
#19 0x3637363236312e30 in ??()
#20 0x006d305b1b333637 in ??()
#21 0x00007fffffffbbf0 in ??()
#22 0x00000000ffffbbd8 in ??()
---Type <return> to continue, or q <return> to quit---
#23 0x00007fff00000000 in ??()
#24 0x0000000000000000 in ??()
(gdb)
- Искал
LENGTH_INDEX
иstm_buf_t[]
, там все в порядке.
А также; Если я вызываю std::cout << std::flush;
из другого места, которое имеет вызов этой функции, оно также обрабатывает Segfault!
...
genSum (stm_buf_t);
writeToSerial();
std::cout << std::flush;
...
Какой может быть мой следующий подход?
Привет @Orhan G. Hafif, пытались ли вы использовать отладчик памяти (например, valgrind)? – vadikrobot
Hi @vadikrobot, я только что попробовал и увидел ценные результаты. Я напишу об этом позже. Благодаря! я –