Модератор: Модераторы разделов
IMB
Сообщения: 2559
ОС: Debian
Сообщение
IMB » 15.12.2021 15:11
Собрал приложение с
-ggdb -fsanitize=address -fno-omit-frame-pointer под arm, gcc-11.2.0, но при запуске всё валится
Код: Выделить всё
~ # LD_PRELOAD=/tmp/libasan.so.6 LD_LIBRARY_PATH=/tmp /tmp/player args
AddressSanitizer:DEADLYSIGNAL
=================================================================
==3198==ERROR: AddressSanitizer: stack-overflow on address 0x7e47cf68 (pc 0x76aa9e48 bp 0x7e47d394 sp 0x7e47cf60 T0)
#0 0x76aa9e48 in __sanitizer::StackTrace::StackTrace(unsigned long const*, unsigned int) /tmp/firmware/build-arm-hi3798mv100/arm-rtk-linux-gnueabi/.build/arm-rtk-linux-gn2
#1 0x76aa9e48 in __sanitizer::BufferedStackTrace::BufferedStackTrace() /tmp/firmware/build-arm-hi3798mv100/arm-rtk-linux-gnueabi/.build/arm-rtk-linux-gnueabi/src/gcc/libs5
#2 0x76aa9e48 in __interceptor_malloc /tmp/firmware/build-arm-hi3798mv100/arm-rtk-linux-gnueabi/.build/arm-rtk-linux-gnueabi/src/gcc/libsanitizer/asan/asan_malloc_linux.c5
SUMMARY: AddressSanitizer: stack-overflow /tmp/firmware/build-arm-hi3798mv100/arm-rtk-linux-gnueabi/.build/arm-rtk-linux-gnueabi/src/gcc/libsanitizer/sanitizer_common/sanitiz)
==3198==ABORTING
Как бы его убедить поработать побольше и проверить приложение?
Спасибо.
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 15.12.2021 15:18
-fsanitize-recover=all
И запускать с ASAN_OPTIONS=halt_on_error=0 в окружении.
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
IMB
Сообщения: 2559
ОС: Debian
Сообщение
IMB » 15.12.2021 15:27
Увы, не помогло. Мне надо проверить библиотеку, так что я её пересобираю с ключами и указываю через LD_LIBRARY_PATH
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 16.12.2021 14:13
Попробуйте увеличить или вообще убрать лимит на размер стека: ulimit -s unlimited
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
IMB
Сообщения: 2559
ОС: Debian
Сообщение
IMB » 17.12.2021 12:09
Код: Выделить всё
~ # ulimit -a
-f: file size (blocks) unlimited
-t: cpu time (seconds) unlimited
-d: data seg size (kb) unlimited
-s: stack size (kb) unlimited
-c: core file size (blocks) unlimited
-m: resident set size (kb) unlimited
-l: locked memory (kb) 64
-p: processes 1431
-n: file descriptors 1024
-v: address space (kb) unlimited
-w: locks unlimited
-e: scheduling priority 0
-r: real-time priority 0
результат запуска
Код: Выделить всё
==2232==Shadow memory range interleaves with an existing memory mapping. ASan cannot proceed correctly. ABORTING.
==2232==ASan shadow was supposed to be located in the [0x1ffff000-0x37ffffff] range.
https://bbs.archlinux.org/viewtopic.php?id=228947
This is fixed in linux 4.12.8-2
не мой случай
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 17.12.2021 13:21
Тут пишут, что при unlimited такое случается. Видимо, есть смысл поставить какое-то разумное ограничение.
И я бы всё же поинтересовался, зачем программа так активно использует стек. Даже если без asan проблемы не наблюдается, она всё равно может проявиться при каком-то стечении обстоятельств.
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
IMB
Сообщения: 2559
ОС: Debian
Сообщение
IMB » 17.12.2021 13:35
да сама не насколько активно использует, но участились случаи oom-killer и пытаюсь понять - это новая утечка, по коду вроде ничего не меняли, или некая новая ошибка приводящая к большому выделению
Добавлено (13:50):
поэкспериментировал с значениями и дошёл до oom-killer при вызове, собственно на устройсве не так много памяти
Код: Выделить всё
~ # free -m
total used free shared buffers cached
Mem: 481 279 202 26 0 120
-/+ buffers/cache: 159 322
Swap: 0 0 0
и если sanitizer много потребляет, то может и не хватает