首页 > 编程语言 >程序挂起,等待调试器附加

程序挂起,等待调试器附加

时间:2022-11-01 13:23:26浏览次数:66  
标签:__ int 程序 附加 debugbreak DebugBreak include asm 调试器

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 電腦上)。

此常式僅可作為內建常式使用。

 

标签:__,int,程序,附加,debugbreak,DebugBreak,include,asm,调试器
From: https://www.cnblogs.com/ioriwellings/p/15829271.html

相关文章