问题标签 [debugbreak]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
16866 浏览

xcode - Xcode 等效于 ' __asm int 3 / DebugBreak() / Halt?

在 Xcode 中导致硬中断的指令是什么?例如,在 Visual Studio 下,我可以执行“_asm int 3”或“DebugBreak()”。在某些 GCC 实现下,它是 asm("break 0") 或 asm("trap")。

我在 Xcode 下尝试了各种组合,但没有任何运气。(内联汇编器工作正常,所以这不是语法问题)。

作为参考,这是一个断言宏。我不想将 assert.h 中的定义用于可移植性,并且因为它们似乎在 XCode 提供的版本中执行 abort()。


约翰 - 超级,干杯。作为参考,int 3 语法是 Intel Mac 和 iPhone 所需的语法。


克里斯 - 感谢您的评论,但有很多原因可以避免将代码库移植到不同平台的标准 assert() 函数。如果您在滚动自己的断言时遇到了麻烦,通常是因为您希望保留其他功能(日志记录、堆栈展开、用户交互)。

您尝试通过“__assert”或类似的实现来替换处理程序的建议是不可移植的。标准的“断言”通常是一个宏,虽然它可能映射到 Mac 上的 __assert,但在其他平台上却没有.

0 投票
5 回答
29037 浏览

c# - 如何在 C# 中使用 DebugBreak()?

语法是什么以及需要导入哪个命名空间/类?如果可能的话,给我示例代码。这会有很大帮助。

0 投票
2 回答
8684 浏览

visual-studio - 如何禁用程序断点/断言?

我正在使用 Visual Studio 开发本机应用程序,我在使用 __asm int 3 或 __debugbreak 放置的代码中有一个程序断点(断言)。有时当我点击它时,我想禁用它,以便同一调试会话中的连续点击不再闯入调试器。我怎样才能做到这一点?

0 投票
11 回答
48660 浏览

c++ - 是否有可移植的等价于 DebugBreak()/__debugbreak?

在 MSVC 中,DebugBreak()__debugbreak会导致调试器中断。在 x86 上它相当于写“_asm int 3”,在 x64 上它是不同的。使用 gcc(或任何其他标准编译器)编译时,我也想中断调试器。是否有独立于平台的功能或内在功能?我看到了关于这个的XCode 问题,但它似乎不够便携。

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

0 投票
11 回答
16677 浏览

c++ - 在 C++ 中实现断言检查的最佳方法是什么?

我的意思是,我需要做什么才能在我的代码中使用有用的断言?

MFC 很简单,我只使用 ASSERT(something)。

什么是非MFC方式?

编辑:是否可以停止断言在 assert.c 中的中断而不是我的名为 assert() 的文件?

编辑:<assert.h> &之间有什么区别<cassert>

接受的答案:这篇文章中有很多很好的答案,我希望我能接受多个答案(或者有人会将它们全部结合起来)。所以答案被授予费鲁乔(第一个答案)。

0 投票
8 回答
14672 浏览

c++ - 在正确的时间点将调试器附加到 VC++ 中的进程的最佳方法是什么?

调试时,有时您需要附加一个已经在运行的进程,而不是仅仅在调试器中启动应用程序。

我自己通常会调用 Sleep() 或 MessageBox,以便更容易附加调试器。我担心其中一些可能最终会提交到源代码控制。

为了避免这种情况,最好的办法是什么,同时仍然延迟足够的时间,以便您可以将调试器附加到正在运行的进程?

用 an 保护睡眠或消息框#ifdef _DEBUG是一种方法,但我想知道是否有更好的方法。

使用睡眠,您还会遇到无法及时连接的问题。使用 MessageBox,您可能会遇到问题,您可能正在远程调试,或者调试没有可见 GUI 的进程(例如在 Vista 上作为服务运行)

0 投票
1 回答
203 浏览

fortran - 让 DebugBreak 在 Fortran 中工作

我找到了以下文章:

http://software.intel.com/en-us/articles/intel-fortran-compiler-microsoft-debugging-function-debugbreak/

不幸的是,当我尝试实现此代码并编译时,我收到以下错误:

错误 1 ​​错误 #7286:此符号已多次声明 DEC$ ATTRIBUTES ALIAS 属性。[调试中断] 176

我正在使用英特尔 FORTRAN 编译器。

非常感谢任何额外的见解。

0 投票
1 回答
468 浏览

assembly - iPad 的 DebugBreak

我想为 iPad 制作 DebugBreak,发现 asm{trap} 应该可以工作,但是有一个问题:如果我使用 asm{trap} 我有错误:未启用 asm 块,请使用 `-fasm-blocks'。如果我启用 -fasm-blocks 我还有另一个错误:ARM 不支持 -fasm-blocks 选项。

你知道另一种实现 DebugBreak 或在 iPad 上编译 asm 代码的方法吗?

0 投票
2 回答
1207 浏览

windows - 明确使应用程序崩溃的最干净的方法?

我的应用程序内置了自定义崩溃处理(请参阅 John Robbins 关于“调试 Windows 应用程序”的优秀书籍)。为了测试这个功能,我总是使用 Windows 函数 DebugBreak(),它总是很完美。但从 Windows 7 开始,调用此函数只会显示“已到达断点”并停止应用程序,而无需调用我的崩溃处理程序。

我总是可以将此代码放在我的应用程序中以测试崩溃功能:

甚至添加几种情况,以防 0xdeadbeef 是有效地址:

但我想知道:难道没有一种更简洁的方法可以让你的应用程序在 Windows 下崩溃吗?

0 投票
1 回答
1201 浏览

.net - DebugBreak 的行为在非托管和混合(非托管+托管)应用程序之间有所不同?

获取以下简单源(将其命名为 test.cpp):

使用以下命令编译并链接它:

如果现在运行 TEST.EXE(在 64 位 Windows 7 系统上),您将看到以下对话框:

非托管应用程序中的 DebugBreak

现在添加以下源文件(将其命名为 test2.cpp):

并将其与第一个源一起编译和链接,如下所示:

请注意,我们甚至没有调用 hello 函数,我们只是将其链接进去。

现在再次运行 TEST.EXE(在同一个 64 位 Windows 7 系统上)。而不是上面显示的对话框,你会得到这个:

混合模式应用程序中的 DebugBreak

显然,.Net 框架中的链接使 DebugBreak 的行为有所不同。为什么是这样?我怎样才能恢复旧的 DebugBreak 行为?这可能是 Windows 7 或 64 位特定行为吗?

附带说明一下我为什么要使用 DebugBreak:我们有一个自定义断言框架(类似于 John Robbin 的调试 Windows 应用程序书中的 SuperAssert),我使用 DebugBreak 函数,以便开发人员可以跳转到调试器(或打开一个新的调试器)如果有问题。现在只有简单的弹出窗口,不再可能跳转到调试器。

作为替代解决方案,我可以执行除以零或写入无效地址,但我发现这是一个不太干净的解决方案。

编辑: 这是第二个测试中的调用堆栈(简单对话框):

这是第一个测试中的调用堆栈(带有选项“关闭”和“调试”的对话框):

不同之处始于 ntdll.dll!Executehandler2@20。在非 .net 应用程序中,它调用ntdll.dll!@_EH4_CallFilterFunc. 在 .net 应用程序中是调用clr.dll!__except_handler4