Добрый день,
Есть некий код, написанный на С++. В виде псевдокода схематично он выглядит так:
void func1()
{
some_func2();
fprintf(stderr, "some_func2()\n");
some_func3();
fprintf(stderr, "some_func3()\n");
}
Код, можно сказать, линейный. Иногда по логам вижу, что some_func2() вызывается, а вот до some_func3() уже не доходит. При этом func1 каким-то магическим образом завершается. Segmentation Fault не происходит.
Поначалу думал, что fprintf почему-то не виден, но оказалось код до вызова some_func3 действительно не доходит.
Причем это все происходит спорадически. 1 раз на 100 вызовов срабатывает, поэтому дебагером поймайть не могу.
Важное замечание, целевая платформа ARM.
Если б это было на x86, я бы предположил, что some_func2 где-то потерла стек и в результате вызвался ret на другую инструкцию. Но тогда были бы переодические SIGSEGV. На всякий случай в some_func2() завел массив на стеке, проинициализировал его определенными данными. На выходе из some_func2() сравниваю эти значения, все ок. Значит стек не трется. Но возможно на ARM адрес возврата из функции вообще не в стеке лежит?
Пытаюсь пофиксить эту штуку, уже вторую неделю.
По поведению, где-то memory corruption. Но где и как найти? Буду рад любым дельным советам.