Я пытаюсь написать независимый от платформы код для программного создания точки останова. Я нашел std::breakpoint, которого, конечно, не существует до C++26. Я изучил предложение дальше и нашел эталонную реализацию. Я немного адаптировал его, включив в него стандартную версию по умолчанию, чтобы мечтать о будущем, но начал с первого фрагмента ссылки, в котором есть изящная работа препроцессора, включающая использование __has_builtin, который Я никогда раньше не видел. Вот куда я попал:
// If later than C++23, we can use the standard breakpoint function.
#if defined(__cplusplus) && __cplusplus > 202302L
#include
#define breakpoint() std::breakpoint_if_debugging()
#endif
// Check if compiler has an already-available builtin debug breaking function.
#if !defined(breakpoint) && defined(__has_builtin) && !defined(__ibmxl__)
#if __has_builtin(__builtin_debugtrap)
#define breakpoint() __builtin_debugtrap()
#elif __has_builtin(__debugbreak)
#define breakpoint() __debugbreak()
#endif
#endif
// Failed to get a breakpointing function.
#if !defined(breakpoint)
#error There wasn't a simple breakpoint method.
#endif
И вот, Intellisense полагает, что путь __has_builtin(__debug_break) — это все, что мне нужно для получения определения точки останова (по крайней мере, для Windows). Я попытался скомпилировать для проверки и вместо этого сразу же нашел путь к ошибке.
Я не могу найти ничего, что явно описывало бы существование __has_builtin при использовании MSVC но, насколько я понимаю, __debug_break — это встроенная функция только для MSVC. Я здесь что-то не понимаю? Это для clang в Windows?
Есть ли опция компилятора, которую мне нужно включить, чтобы получить __has_builtin?
Наведение курсора на __has_builtin( __debugbreak) имеет intellisense, показывающий, что он расширяется до 1. Это просто классическая ложь IntelliSense? Он также показывает __has_builtin как «предопределенный динамический макрос», что звучит так, как будто на самом деле это означает «магическую функцию, которую обрабатывает компилятор».
Я пытаюсь написать независимый от платформы код для программного создания точки останова. Я нашел std::breakpoint, которого, конечно, не существует до C++26. Я изучил предложение дальше и нашел эталонную реализацию. Я немного адаптировал его, включив в него стандартную версию по умолчанию, чтобы мечтать о будущем, но начал с первого фрагмента ссылки, в котором есть изящная работа препроцессора, включающая использование __has_builtin, который Я никогда раньше не видел. Вот куда я попал: [code]// If later than C++23, we can use the standard breakpoint function. #if defined(__cplusplus) && __cplusplus > 202302L #include #define breakpoint() std::breakpoint_if_debugging() #endif
// Check if compiler has an already-available builtin debug breaking function. #if !defined(breakpoint) && defined(__has_builtin) && !defined(__ibmxl__) #if __has_builtin(__builtin_debugtrap) #define breakpoint() __builtin_debugtrap() #elif __has_builtin(__debugbreak) #define breakpoint() __debugbreak() #endif #endif
// Failed to get a breakpointing function. #if !defined(breakpoint) #error There wasn't a simple breakpoint method. #endif [/code] И вот, Intellisense полагает, что путь __has_builtin(__debug_break) — это все, что мне нужно для получения определения точки останова (по крайней мере, для Windows). Я попытался скомпилировать для проверки и вместо этого сразу же нашел путь к ошибке. [list] [*]Я не могу найти ничего, что явно описывало бы существование __has_builtin при использовании MSVC но, насколько я понимаю, __debug_break — это встроенная функция только для MSVC. Я здесь что-то не понимаю? Это для clang в Windows? [*]Есть ли опция компилятора, которую мне нужно включить, чтобы получить __has_builtin? [*]Наведение курсора на __has_builtin( __debugbreak) имеет intellisense, показывающий, что он расширяется до 1. Это просто классическая ложь IntelliSense? Он также показывает __has_builtin как «предопределенный динамический макрос», что звучит так, как будто на самом деле это означает «магическую функцию, которую обрабатывает компилятор». [/list]
Я пытаюсь написать независимый от платформы код для программного создания точки останова. Я нашел std::breakpoint, которого, конечно, не существует до C++26. Я изучил предложение дальше и нашел эталонную реализацию. Я немного адаптировал его,...
Я пытаюсь написать независимый от платформы код для программного создания точки останова. Я нашел std::breakpoint, которого, конечно, не существует до C++26. Я изучил предложение дальше и нашел эталонную реализацию. Я немного адаптировал его,...
vs2022 с MSVC 14.43.34808
Windows 11 Pro 24H2
Использование cmake
Я использую httplib ( в моем модуле и когда Complize willscc will will in modul Операции внутри Thread.h...
vs2022 с MSVC 14.43.34808
Windows 11 Pro 24H2
Использование cmake
Я использую httplib ( в моем модуле и когда Complize willscc will will in modul Операции внутри Thread.h...