Существуют ли какие-либо планы для С++ 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

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