Есть ли эквивалент в gnatada для c macros__LINE__
, __FILE__
, __func__
? Они очень полезны в сообщениях об ошибках, чтобы быстро найти ошибку в коде. Возможно, есть еще одна концепция для архивирования одной и той же цели.с макро __LINE__, __FILE__, __func__ эквивалент в комара Ada
ответ
не имеют установку на руку, чтобы проверить, но в документации сказано, что пакет GNAT.Source_Info «предоставляет подпрограммами, которые дают доступ к информации с исходным кодом, известным во время компиляции, такие как имя текущего файла и номер строки ". и adacore имеет spec for the package (через Christoph)
Извините, __LINE__
и __FILE__
, а другие __THING__
s - это функции предварительного процессора C, который не является тем, что есть у ada. Вероятно, вы могли бы использовать жюри-простой прокси-скрипт (или аналогичный) для предварительного запуска кода для имитации __LINE__
и __FILE__
, но __func__
было бы сложнее, потому что это означало бы фактически разбор кода.
А, получается, что он существует в GNAT. Пример:
with Ada.Text_IO
GNAT.Source_Info;
use Ada.Text_IO
GNAT.Source_Info;
procedure source_error is
-- example of GNAT.Source_Info.Source_Location
i : integer;
j : integer := 0;
begin
i := 5/j; -- division by zero
exception when others =>
put_line(standard_error
Source_Location & ": exception raised");
end source_error;
Другой подход заключается в том, чтобы печатать трассировки стека на исключение. Есть некоторый аргумент связывания GNAT, позволяющий хранить трассировки стека (-E?), А затем вы можете печатать их с помощью пакета Ada.Exceptions. Существует также пакет для печати стека в любой момент или из случая возникновения ошибки (у меня всегда есть обработчик последнего курорта для всех задач). См. http://rosettacode.org/wiki/Stack_traces#Ada
В моем опыте следы стека на исключении идеально подходят для выявления проблем.
- 1. Visual C++ эквивалент __FILE__, __LINE__ и __PRETTY_FUNCTION__
- 2. redefine __LINE__ и __FILE__ константы
- 3. Как получить __FILE__, __func__ и __LINE__ макрос работает в одной строке?
- 4. Objective-C xcode: эквивалент __FILE__ и __LINE__ из C/C++?
- 5. __FILE__, __LINE__ и использование __FUNCTION__ в C++
- 6. Использование __FILE__ и __LINE__ в рекурсивной функции
- 7. __LINE__ эквивалент в Java?
- 8. Capture __LINE__ и __FILE__ без #define
- 9. имя функции ($ param, $ line = __LINE__, $ file = __FILE__) {};
- 10. __FILE__, __LINE__ и __FUNCTION__ для файлов QML?
- 11. C++ конкатенация __FILE__ и __LINE__ макросов?
- 12. lua equiv of __LINE__ и __FILE__?
- 13. Haskell эквивалент C's __LINE__
- 14. Flex/ActionScript 3 эквиваленты для __FILE__ и __LINE__
- 15. Явный эквивалент Ruby's __FILE__?
- 16. эквивалент python __file__ в julia?
- 17. Использование __FILE__ и __LINE__ в определенный пользователем макрос
- 18. Mangling __FILE__ и __LINE__ в коде для цитирования?
- 19. __LINE__ эквивалент для оболочки Linux
- 20. __LINE__ макрос не работает, когда определить PRINTF макро
- 21. Эквивалент __func__ или __FUNCTION__ в ржавчине?
- 22. Как константы __LINE__ и __FILE__ реализованы в Ruby?
- 23. Как расширяются __FILE__ и __LINE__ в коде ядра?
- 24. штраф за выполнение использования __LINE__ и __FILE__ в C/C++
- 25. Эквивалент __func__ (от C) в Python
- 26. Как Вала поддерживает макросы __function__ __file__ __line__ языка C?
- 27. Как найти __FUNCTION__, __LINE__ и __FILE__ родительской функции?
- 28. шаблон эквивалент #var в макро
- 29. __LINE__ оценивали inconsistenly в лямбда, который передается функции, как макро
- 30. __func__ не заменен в предварительно обработанном выходе
см http://adacore.com/gap-static/GNAT_Book/html/rts/g-souinf__ads.htm документации – Christoph
код, чтобы получить файл ': линия, procedure': ' с GNAT.Source_Info; ' 'Put_Line (GNAT.Source_Info.Source_Location &", "& NAT.Source_Info.Enclosing_Entity);' – StackUnderflow
Исправлена ссылка Кристофа в ответ: https://www2.adacore.com/gap-static/GNAT_Book/html/rts /g-souinf__ads.htm –