在MSVC中,DebugBreak()或__debugbreak会导致调试器中断。在x86上,它等同于编写"_asm int3“,在x64上则有所不同。当使用gcc (或任何其他标准编译器)编译时,我也想进入调试器。是否有独立于平台的函数或内部函数?我看过关于这一点的XCode question,但它似乎不够便携。
旁注:我主要想用它来实现ASSERT,我知道我可以使用assert()来实现它,但我也想把DEBUG_BREAK或其他东西写到代码中。
发布于 2008-10-06 09:05:26
如何定义一个基于#ifdef的条件宏,根据当前的架构或平台扩展到不同的构造。
类似于:
#ifdef _MSC_VER
#define DEBUG_BREAK __debugbreak()
#else
...
#endif这将由预处理器根据编译代码的平台通过正确的调试器中断指令来扩展。这样,您就可以在代码中始终使用DEBUG_BREAK。
发布于 2011-04-06 11:07:32
一种可移植到大多数POSIX系统的方法是:
raise(SIGTRAP);发布于 2018-03-03 07:47:34
我只是将a module添加到portable-snippets (一个可移植代码的公共领域片段的集合)中来实现这一点。它不是100%可移植的,但它应该相当健壮:
某些版本的clang的
__builtin_debugtrap (由__has_builtin(__builtin_debugtrap))__debugbreak__breakpoint(42)int3.inst 0xde01.inst 0xd4200000.inst 0xe7f001f0bpt__builtin_trapsignal.h和defined(SIGTRAP) (即,POSIX)、POSIX将来,可移植代码片段中的模块可能会扩展到包含其他逻辑,而我可能会忘记更新这个答案,所以您应该在那里查找更新。它是公共领域(CC0),所以请随意窃取代码。
https://stackoverflow.com/questions/173618
复制相似问题