Тут хитрый контекст: я почти не контролирую сборку кода. Программа пишется для Android на Qt.
Более того: ошибка не воспроизводится на моём оборудовании.
Плей Маркет сообщает мне вот что:
backtrace:
#00 pc 000000000001d75e /system/lib/libc.so (abort+58)
#01 pc 000000000001d9c7 /system/lib/libc.so (__assert2+22)
#02 pc 0000000000016149 /data/app/org.asciigames.fillfield--qxeEjn8vGLqekL2bnvZTg==/lib/arm/libFillField.so (Game::makeMove(int, int)+256)
#03 pc 0000000000017d9f /data/app/org.asciigames.fillfield--qxeEjn8vGLqekL2bnvZTg==/lib/arm/libFillField.so (ViewGame::tapProcessing(int, int, int)+346)
#04 pc 0000000000126ad7 /data/app/org.asciigames.fillfield--qxeEjn8vGLqekL2bnvZTg==/lib/arm/libQt5Widgets.so (QWidget::event(QEvent*)+322)
А вот кусочки важного кода:
1) tapProcessing(int, int, int)
if (x_field < 0 || x_field > 7) return;
if (y_field < 0 || y_field > 7) return;
_game->makeMove(x_field, y_field);
2) makeMove(int, int)
assert(x >= 0 && x <= 7 && y >= 0 && y <= 7);
Да, assert стоит первой же строкой и я ума не могу приложить при каких обстоятельствах он даже теоретически может сработать.
Как вообще пользователям попал код с ассертами? Знамо как: сначала я провтыкал их отключить, а теперь вот оказалось что не зря я его впихнул.
«Методом тыка» я ничего проверить не могу. У меня проблема не воспроизводится, с пользователями я пообщаться тоже не могу. Так что решать нужно лишь созерцая код.