LINUX.ORG.RU

valgrind или что-то другое? Цель - найти конкретное место падения (вызов, библиотека).


0

1

Сабж (-;

Большое приложение из нескольких библиотек (C++). Наворачивается то-ли от неловли исключения, то-ли от игнорирования неудачного выделения памяти и попытке записать что-то не в свой огород.

Нужно увидеть стек вызовов или что-то другое, показывающее название функции и библиотеки.

Если советуете какую-то тулзу, посоветуйте пожалуйста ещё набор параметров, например как лучше всего решить проблему с пом. gdb (по шагам).

Спасибо!

$ ulimit -c unlimited
$ ./my_cool_prog
Segmentation fault, core dumped
$ gdb ./my_cool_prog core
(gdb) bt

kemm ()

valgrind

Хотя если оно падает в сегфолт с вероятностью 100%, то хватит банального прогона дебаггером - смотри Call Stack в момент падения.

Deleted ()

Нужно увидеть стек вызовов или что-то другое, показывающее название функции и библиотеки.

Ну тебе бы там дворф сгенерить (dwarf). Или если локально повторяется gdb program -> run -> уронить -> гулять по стеку.

А вообще если есть версия под венду - см. application verifier от микрософт. У этой поделки с невнятным гуем очень хороший нюх на трудновылавливаемые кросспоточные баги.

wolfy ()

GDB однозначно. Но чтобы увидеть имена функций в стеке, вам нужны debug symbols. На i386/amd64 достаточно просто собрать вашу аппликуху с дебагом (-O0 -g). Под ARM немного сложнее - нужно ставить debug symbols для всех библиотек, через которые прошел вызов.

Пример сессии:

gdb> attach 12345
.....
gdb> bt
Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.