#define _CrtDbgBreak() __asm { int 3 }
while( !::IsDebuggerPresent() )
::Sleep( 100 ); // to avoid 100% CPU load
_asm int 3; //DebugBreak()
64 位应用中用什么替代 "int 3" 指令?
What can I use instead of “int 3” instruction in a 64-bit application?
The 64-bit version of Visual C++ compiler does not support inline assembler, so you cannot write code like “__asm int 3”. But there is one more, less known mechanism to create interrupts during debugging – __debugbreak(). This is an intrinsic function of the VisualC++ compiler defined in vc\include\intrin.h which actually has the same functionality as int 3. Unlike int 3, this function is cross-platform. The Win32 function DebugBreak() has a similar functionality.
64 位版本的 Visual c + + 编译器不支持内联汇编,所以你不能写 __asm int 3
这样的代码。但是还有一个,不太为常人所知的机制在调试期间创建中断 — — __debugbreak()
。这是定义在 vc\include\intrin.h
中的 VisualC + + 编译器内部函数,它具有 int 3
相同的功能。不像 int 3
,此功能是跨平台的。Win32 函数 DebugBreak()
有一个类似的功能。
#include <intrin.h>
#include <stdio.h>
int main()
{
__debugbreak();
printf("hello, world!\n");
return 0;
}
__debugbreak
Microsoft 特定的
在您的程式碼中導致中斷點,在該位置,系統會提示使用者執行偵錯工具。
void __debugbreak();
內建 |
架構 |
頁首 |
---|---|---|
__debugbreak |
x86、ARM、x64 |
<intrin.h> |
備註
__debugbreak 編譯器內建物件與 DebugBreak (英文) 類型,是一種可導致中斷點的可移植 Win32 方法。
注意事項 |
---|
當使用 /clr 進行編譯時,包含 __debugbreak 的函式會編譯為 MSIL。asm int 3 會導致函式編譯為原生。如需詳細資訊,請參閱__asm。 |
例如:
main() {
__debugbreak();
}
類似於:
main() {
__asm {
int 3
}
}
(在 x86 電腦上)。此常式僅可作為內建常式使用。
南来地,北往的,上班的,下岗的,走过路过不要错过!
======================个性签名=====================
之前认为Apple 的iOS 设计的要比 Android 稳定,我错了吗?
下载的许多客户端程序/游戏程序,经常会Crash,是程序写的不好(内存泄漏?刚启动也会吗?)还是iOS本身的不稳定!!!
如果在Android手机中可以简单联接到ddms,就可以查看系统log,很容易看到程序为什么出错,在iPhone中如何得知呢?试试Organizer吧,分析一下Device logs,也许有用.