首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有可移植的与DebugBreak()/__debugbreak等价的东西?

有没有可移植的与DebugBreak()/__debugbreak等价的东西?
EN

Stack Overflow用户
提问于 2008-10-06 08:57:53
回答 11查看 48.7K关注 0票数 73

在MSVC中,DebugBreak()__debugbreak会导致调试器中断。在x86上,它等同于编写"_asm int3“,在x64上则有所不同。当使用gcc (或任何其他标准编译器)编译时,我也想进入调试器。是否有独立于平台的函数或内部函数?我看过关于这一点的XCode question,但它似乎不够便携。

旁注:我主要想用它来实现ASSERT,我知道我可以使用assert()来实现它,但我也想把DEBUG_BREAK或其他东西写到代码中。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2008-10-06 09:05:26

如何定义一个基于#ifdef的条件宏,根据当前的架构或平台扩展到不同的构造。

类似于:

代码语言:javascript
复制
#ifdef _MSC_VER
#define DEBUG_BREAK __debugbreak()
#else
...
#endif

这将由预处理器根据编译代码的平台通过正确的调试器中断指令来扩展。这样,您就可以在代码中始终使用DEBUG_BREAK

票数 19
EN

Stack Overflow用户

发布于 2011-04-06 11:07:32

一种可移植到大多数POSIX系统的方法是:

代码语言:javascript
复制
raise(SIGTRAP);
票数 56
EN

Stack Overflow用户

发布于 2018-03-03 07:47:34

我只是将a module添加到portable-snippets (一个可移植代码的公共领域片段的集合)中来实现这一点。它不是100%可移植的,但它应该相当健壮:

某些版本的clang的

  • __builtin_debugtrap (由__has_builtin(__builtin_debugtrap))
  • On MSVC与英特尔C/C++编译器识别:__debugbreak
  • For ARM C/C++编译器:__breakpoint(42)
  • For x86/x86_64,汇编:int3
  • For ARM Thumb,汇编:.inst 0xde01
  • For ARM Alpha,汇编:.inst 0xd4200000
  • For other ARM,汇编:.inst 0xe7f001f0
  • For Alpha,汇编:bpt
  • For非托管C与GCC (或伪装成它的东西),__builtin_trap
  • Otherwise,包括signal.h
    • If defined(SIGTRAP) (即,POSIX)、POSIX

将来,可移植代码片段中的模块可能会扩展到包含其他逻辑,而我可能会忘记更新这个答案,所以您应该在那里查找更新。它是公共领域(CC0),所以请随意窃取代码。

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/173618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档