p.cpp:
Код: Выделить всё
int main() { return 0; }
Код: Выделить всё
$ c++ -o p p.cpp -fsanitize=address -fsanitize=undefined
Код: Выделить всё
$ ./p
AddressSanitizer:DEADLYSIGNAL
AddressSanitizer:DEADLYSIGNAL
AddressSanitizer:DEADLYSIGNAL
AddressSanitizer:DEADLYSIGNAL
AddressSanitizer:DEADLYSIGNAL
AddressSanitizer:DEADLYSIGNAL
Segmentation fault (core dumped)
Если я используйте одну очистку: sanitize=undefined или sanitize=address, она также работает, но комбинация обоих не работает. Конечно, и без какой-либо дезинфекции все работает нормально.
Моя настройка:
Код: Выделить всё
$ c++ --version
c++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
gdb не позволяет отлаживать программы, скомпилированные с помощью ASAN, но вот его вывод, чего стоит:
В Ubuntu 22.04.4.
gdb не позволяет отладку программ, скомпилированных с помощью ASAN, но вот его вывод, чего стоит:
р>
Код: Выделить всё
$ gdb p
GNU gdb (Ubuntu 12.1-0ubuntu1~22.04) 12.1
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
.
Find the GDB manual and other documentation resources online at:
.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from p...
(gdb) run
Starting program: /tmp/p
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
==432014==LeakSanitizer has encountered a fatal error.
==432014==HINT: For debugging, try setting environment variable LSAN_OPTIONS=verbosity=1:log_threads=1
==432014==HINT: LeakSanitizer does not work under ptrace (strace, gdb, etc)
[Inferior 1 (process 432014) exited with code 01]
(gdb) bt
No stack.
(gdb)
- эту ошибку можно прекрасно воспроизвести, установив новую версию Ubuntu 22.04 и установив g++.
на некоторых машинах требуется несколько попыток, прежде чем воспроизвести ее. - на данный момент у меня нет ни одной машины с Ubuntu 22.04, на которой эта ошибка не воспроизводилась.
Подробнее здесь: https://stackoverflow.com/questions/782 ... adlysignal