tgoop.com/gdb_dbg/54
Last Update:
StrStrFast (часть 1)
Вечер пятницы – самое время, чтобы рассказать очередную байку про отладку!
Недавно отлаживал прекрасную проблему – злостный и непонятный развал виртуальный машины вдрабадан. Доступа к среде, где все хоть иногда воспроизводится проблема у меня не было, так что это была отладка по переписке: скажи коллеге в другой части мира, какой следующий эксперимент провести => через пару дней получи новый крэшлог => внимательно вглядывайся в него => повторяй все сначала.
Через какое-то (угадайте, какое!) количество попыток (и экстренных собраний, на которых мне объясняли, что отладить нужно как можно быстрее, ведь это именно так работает, да), я нарыл следующий набор фактов:
1. Развал происходит в каком-то стороннем нативе, а не в коде виртуальной машины (уже победа, но вдруг все-таки мы виноваты? позвали его, например, не коряво);
2. Более конкретно, это всегда было связано с сишным методом с интригующим названием StrStrFast
;
3. Если развал случался, то обязательно в некотором цикле, при том именно на 93837 итерации. Именно на ней!
4. Известна даже инструкция, где что-то идет не так – это vpcmpeqb ymm2, ymm0, YMMWORD PTR [r13+rax*1+0x0]
.
Инструкция не совсем обычная, из AVX, работает с 256-битными ymm регистрами, но в целом пока ничего криминального.
И в вообще казалось бы, ну и все: смотри, кто передал мусор в StrStrFast
, доказывай, что проблема не на нашей стороне и ура. Но не тут то было, ведь есть еще пара фактов:
5. Все входные данные в StrStrFast
корректны. Там реально две хорошие, понятные строчки, память не битая. Вторая строка, кстати, довольно короткая – всего 8 байт;
6. Когда происходит развал, значение выражения r13+rax*1+0x0
, конечно, всегда разное, но, например, может быть таким: 0x7ffc0a803fe8
;
7. При этом память по адресу из r13+rax*1+0x0
всегда доступна для чтения и записи.
И это уже чуть странно, т.к. получается, что никто никакой мусор то не передавал.
—
На самом деле этой информации вполне хватило, чтобы раскопать проблему, так и не получая доступа к воспроизводящей среде.
Предлагаю вам сейчас остановиться, еще раз прочитать все вводные и предложить свою версию происходящего)
А я во второй части поста расскажу, как все было на самом деле ↓
#дух_машины
BY Алло, это отладочная?

Share with your friend now:
tgoop.com/gdb_dbg/54