Я работаю над проектом, в котором поступил запрос "мы хотим получить больше информации о трассировках стека сборки сборки".
Под "трассировкой стека" я имею в виду вывод of t a a bt
in gdb
, который я предполагаю эквивалентным выводу gstack для запущенного процесса.Если это правда, то это был бы один из моих вопросов.
Моя главная проблема в том, что наличие трассировок стека довольно нестабильно (иногда они есть, иногда нет), а документация может быть более подробной (например, *Документация 1007 * гласит, что «-fomit-frame-pointer
делает невозможной отладку на некоторых машинах», без какой-либо четкой информации о x86_64)
Кроме того, при проверке работающей программы с gstack
я получаю совершенно идеальные трассировки стека,Однако я не уверен, что если это именно то, что я получу из дампа ядра с gdb
(что будет означать, что во всех случаях, когда я получаю меньше информации, стек действительно поврежден).
В настоящее времякод скомпилирован с -O2
.В последнее время я видел одну трассировку стека, где кадры стека нашего собственного программного кода не имели каких-либо значений параметров функции, но первые (внутренние) кадры, где наш код уже назывался сторонней библиотекой, предоставляли эти значения.Здесь я не уверен, является ли это признаком того, что в сторонней библиотеке установлены лучшие параметры отладки gcc, или эта информация просто теряется в какой-то момент итерирования по трассе стека.
Я полагаю, мои вопросы:
- Какие параметры компилятора влияют на качество трассировки стека на x86_64
- , идентичны ли трассировки стека из этих источников:
- вывод
gstack
работающей программы - подключил gdb к работающей программе, исполняется
t a a bt
- , вызывается
gcore
на работающей программе, открывается ядро с помощью gdb
, затем t a a bt
- программа прерванаи файл ядра, записанный системой, открываемый с помощью
gdb
- Существует ли какая-либо подробная документация, параметры которой влияют на качество трассировки стека на x86_64?
Всесоображения, сделанные в предположении, что двоичный файл программы существует для дампа ядра, а исходный код недоступен.
Под «качеством трассировки стека» я подразумеваю 3 критерия:
- КалифорнияДоступны именованные функции, а не только «??»
- Доступно имя файла с исходными кодами и номер строки
- Доступны параметры вызова функции.