Являются ли GNU backtrace_symbols () и dladdr () поточно-ориентированными? - PullRequest
1 голос
/ 22 июля 2011

Я пишу класс исключений C ++, который должен обеспечивать ограниченную обратную трассировку на сайте броска.Поскольку мое приложение будет многопоточным, исключения могут создаваться одновременно.Я искал в Интернете эту проблему безопасности потоков, но не нашел ни одной.

backtrace() возвращает массив строк C.Эти строки C не должны быть освобождены приложением.Поскольку он получает свою информацию и объединяет эти строки во время выполнения, я боюсь, что он не является потокобезопасным.

dladdr() возвращает struct Dl_info с двумя строками Си.Также не должно быть освобождено приложением.

Ну да ладно, наверное, мне стоит просто прочитать исходный код.

1 Ответ

1 голос
/ 22 июля 2011

С инструкция

Обратный след - это список вызовов функций, которые в данный момент активны в потоке . Обычный способ проверить обратную трассировку программы - использовать внешний отладчик, такой как gdb. Тем не менее, иногда полезно получить программный след в программе, например, для ведения журнала или диагностики.

Заголовочный файл execinfo.h объявляет три функции, которые получают и манипулируют обратными следами текущего потока .

Похоже, они используют локальное хранилище потоков .

dladdr возвращает неизменяемые строки, которые принадлежат загруженному объектному файлу. Это потокобезопасно, поскольку доступно только для чтения, и объект доступен до dlclose.

...