2016-07-18 10 views
1

В настоящее время, когда я запустил мое приложение я получаю следующий вывод:Как заставить ASan показать более одной линии вызова?

/usr/include/c++/4.8/debug/vector:346:error: attempt to subscript container 
    with out-of-bounds index 1, but container only holds 1 elements. 

Objects involved in the operation: 
sequence "this" @ 0x0x60400000fd30 { 
    type = NSt7__debug6vectorIdSaIdEEE; 
} 
Aborted (core dumped) 

Он скомпилированные с официальным убунтом 14.04 НКУ и компилировать флаги:

-fPIC -std=c++11 -fopenmp -Wall -pedantic -Wunused -O0 -g3 -fsanitize=address -fno-omit-frame-pointer -D_GLIBCXX_CONCEPT_CHECKS -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC -fprofile-arcs -ftest-coverage --coverage

LLVM и лязг также установлены из ряда ящик и приложение запускаются следующим образом:

ASAN_OPTIONS=symbolize=1 ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.4 ./app 

Почему только одна строка стека вызовов RS? Как получить контекст, который будет связан с моим приложением?


Примечание: если я запускаю из-под GDB

gdb ./app 
run 
where 

Я получаю читаемый стек вызовов (с номерами строк и сведения о вызове). (GDB), где

#0 0x00007ffff3640c37 in __GI_raise ([email protected]=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56 
#1 0x00007ffff3644028 in __GI_abort() at abort.c:89 
#2 0x00007ffff43c7fe5 in __gnu_debug::_Error_formatter::_M_error() const() 
    from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 
#3 0x0000000000427184 in std::__debug::vector<double, std::allocator<double> >::operator[] (this=0x60400000fd30, 
    __n=1) at /usr/include/c++/4.8/debug/vector:346 
#4 0x00007ffff47f6bfa in GeneralParameters::GeneralParameters... 

еще я хочу, чтобы получить выход стека вызовов без запуска GDB для каждого из моих тестовых приложений 100+ единиц - Я хочу видеть такие ошибки непосредственно на ctest -VV, которая выполняет все мои тесты в порядке.

ответ

0

Похоже, что эта ошибка возникает не от ASan, а от реализации вектора отладки STL. Это не даст вам много информации о stacktrace, но просто прекратит выполнение (то же, что, например, _FORTIFY_SOURCE).