Здравствуйте, Кузнец, Вы писали:
К>Здравствуйте, Кузнец, Вы писали:
К>>Собрался в релизе — вывод от санитайзера был, в дебуге ни в какую не хочет, где я мог накосячить?
К>В дебуге тоже удалось получить вывод, но почему-то он не отличается от вывода в релизе, видимо санитайзер не умеет показывать место в коде, где произошла ошибка, только функцию. Но всё равно интересная штука.
Вы что-то на него наговариваете, у него очень подробный вывод
вплоть до переменных, например:
int main() {
int arr[5];
arr[5] = 17;
return 0;
}
Как видите и строчки кода показывает и даже имя переменной:
==28730==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7ffdfbf6e3b4 at pc 0x00472c2e3a15 bp 0x7ffdfbf6e370 sp 0x7ffdfbf6e360
WRITE of size 4 at 0x7ffdfbf6e3b4 thread T0
#0 0x472c2e3a14 in main /tmp/a.c:3
#1 0x7f2f88ce44c9 in __libc_start_main (/usr/lib/libc.so.6+0x204c9)
#2 0x472c2e3859 in _start (/tmp/a.out+0x859)
Address 0x7ffdfbf6e3b4 is located in stack of thread T0 at offset 52 in frame
#0 0x472c2e3949 in main /tmp/a.c:1
This frame has 1 object(s):
[32, 52) 'arr' <== Memory access at offset 52 overflows this variable
К>>В Qt в pro файлы добавил:
К>>К>>QMAKE_CFLAGS += -fsanitize=address
К>>QMAKE_LFLAGS += -fsanitize=address
К>>
Вроде бы правильный вариант это через CONFIG,
поддержка sanitizer интегрирована в Qt:
CONFIG += sanitizer sanitize_address
но я сам использую cmake, поэтому "за что купил, за то продал"
Здравствуйте, Кузнец, Вы писали:
К>А memory sanitizer что-то не получается подключить, задал флаги Qt:
К>К>QMAKE_CXXFLAGS += -fsanitize=memory
К>QMAKE_LFLAGS += -fsanitize=memory
К>QMAKE_CXXFLAGS += -fPIE
К>QMAKE_LFLAGS += -fPIE
К>QMAKE_CXXFLAGS += -pie
К>QMAKE_LFLAGS += -pie
К>
К>и получил ошибку:
К>К>error: unrecognized argument to -fsanitize= option: 'memory'
К>
Ну clang и gcc все-таки разные компиляторы, поэтому хотя команда Google
и работала над внедрением sanitizer для обоих компиляторов, но интерфейс
не точно соотвествует, -fsanitize=memory это только для clang,
точный список опций можно посмотреть в man gcc