Существуют ли какие-либо планы для С++ 14 или более поздних версий для стандартизованных backtrace и других утилит для отладки?
Есть ли планы по стандартизации backtrace и других утилит для отладки, которые будут добавлены в С++ 14 (или выше), или будут ли они оставаться функциональностью, добавленной ОС или компилятором?
Ответы
Ответ 1
Нет. Планов нет.
Для одного стандарта не указывается, как должны выполняться вызовы функций. И во всей действительности это зависит от аппаратного обеспечения. Вероятно, вы этого не знаете, но есть аппаратные средства, которые не нажимают обратные адреса на стек. Некоторые из них используют динамические команды jmp, а другие используют обратные очереди для отслеживания обратных адресов.
Трассировка стека, о которой вы говорите, возможна на небольшом подмножестве процессоров, но поскольку C и С++ предназначены для работы на как можно большем количестве процессоров, он не будет, не может, определить стандартный способ выполнения обратного следа, который будет определять, как должно производиться оборудование.
Ответ 2
Как сказал Дэн, никакой обратной линии и никакого плана сделать это, насколько мне известно.
Об утилитах отладки, помимо утверждений, я знаю только стандартные макросы, унаследованные от C, например
- __ FILE__, чтобы узнать имя текущего входного файла,
- __ LINE__, чтобы узнать текущий номер строки ввода,
- __ func__, чтобы узнать текущую функцию.
Например
1. #include <iostream>
2.
3. int main() {
4. std::cout << "File " << __FILE__ << ", line " << __LINE__ << std::endl;
5. }
выводит
File /path/your_bin, line 4
Подробнее здесь: http://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html
Ответ 3
Вы можете получить довольно хороший обзор того, что входит в следующий стандарт, просмотрев документы, опубликованные комитетом по стандартам:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/
Здесь вы можете найти предложения, написанные разными людьми, протоколы встреч, проекты стандартов и списки выпусков.
Учитывая статус С++ 14, проект стандартов является наиболее информативным документом для вашего конкретного вопроса. Короткий ответ: нет ничего нового для отладки там.
В 2012 году была опубликована статья о трассировке стека:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3441.html
Однако он, похоже, не оставил никаких следов в фактическом стандарте. Если вы хотите узнать больше, вы можете попробовать прочитать протоколы встреч там или связаться с автором статьи - не все записано на собраниях, а только на сессиях, где все собираются и голосуют, но не работают индивидуальные группы.