在MSVC中,DebugBreak()或__debugbreak导致调试器中断.在x86上它相当于写"_asm int 3",在x64上它是不同的东西.在使用gcc(或任何其他标准编译器)进行编译时,我也想进入调试器.是否存在平台无关功能或内在功能?我看到了XCode的问题,但它似乎不够便携.
旁注:我主要想用它来实现ASSERT,我知道我可以使用assert(),但我也想在代码中编写DEBUG_BREAK或其他东西.
什么是语法以及需要导入哪个命名空间/类?如果可能,请给我示例代码.这将是非常有帮助的.
什么是导致Xcode难以破解的指令?例如,在Visual Studio下,我可以执行'_asm int 3'或'DebugBreak()'.在一些GCC实现下,它是asm("break 0")或asm("trap").
我在Xcode下尝试了各种组合而没有任何运气.(内联汇编程序工作正常,因此它不是语法问题).
作为参考,这是针对断言宏.我不想在assert.h中使用定义既可移植性,也因为它们似乎在XCode提供的版本中执行了abort().
约翰 - 超级,欢呼.作为参考,int 3语法是Intel Macs和iPhone所需的语法.
Chris - 感谢您的评论,但有很多理由要避免将标准的assert()函数移植到移植到不同平台的代码库.如果您已经解决了滚动自己断言的麻烦,通常是因为您希望保留其他功能(日志记录,堆栈展开,用户交互).
你试图通过'__sert'或类似的实现替换hander的建议不是可移植的.标准'assert'通常是一个宏,虽然它可能映射到Mac上的__assert,但它不在其他平台上.
我的意思是,我需要做什么才能在我的代码中使用有用的断言?
MFC很简单,我只使用ASSERT(某物).
什么是非MFC方式?
编辑:是否有可能在assert.c中停止断言而不是我的调用assert()的文件?
编辑:<assert.h>&之间有什么区别<cassert>?
一般承认的答案:在这篇文章中有很多很棒的答案,我希望我能接受不止一个答案(或者有人将它们全部合并).所以答案会被授予Ferruccio(第一个答案).
我正在使用Visual Studio,开发本机应用程序,我在使用__asm int 3或__debugbreak放置的代码中有一个程序断点(断言).有时当我点击它时,我想禁用它,以便在同一个调试会话中的连续命中不再进入调试器.我怎样才能做到这一点?
在调试时,有时您需要附加已经运行的进程,而不是仅在调试器中启动应用程序.
我自己常常放入Sleep()或MessageBox调用,以便更容易连接调试器.我担心其中一些可能最终会被提交给源代码控制.
在延迟足够时间的同时避免这种情况的最佳方法是什么,以便可以将调试器连接到正在运行的进程?
用#ifdef _DEBUG一种方式保护睡眠或消息框,但我想知道是否有更好的方法.
睡眠时,您还有一个问题,即您可能无法及时附着.使用MessageBox,您可能遇到远程调试或调试没有可见GUI的进程的问题(示例在Vista上作为服务运行)
这两个节点控制台和QT5的V8为基础QJSEngine可以通过以下代码崩溃:
a = []; for (;;) { a.push("hello"); }
Run Code Online (Sandbox Code Playgroud)
崩溃前节点的输出:
FATAL ERROR: JS Allocation failed - process out of memory
Run Code Online (Sandbox Code Playgroud)
QJSEngine崩溃前的输出:
#
# Fatal error in JS
# Allocation failed - process out of memory
#
Run Code Online (Sandbox Code Playgroud)
如果我QJSEngine在调试器下运行我的测试应用程序(见下文),它会v8::internal::OS::DebugBreak在V8代码中显示一个调用.如果我换行代码调用QJSEngine::evaluate到__try-__except(SEH),然后应用程序不会崩溃,但这种方法是针对Windows的.
问题:有没有v8::internal::OS::DebugBreak办法在节点和Qt应用程序中以独立于平台的方式处理?
=== QJSEngine测试代码===
开发环境:QtCreator,Qt5和Windows SDK 7.1,在Windows XP SP3上
QJSEngineTest.pro:
TEMPLATE = app
QT -= gui
QT += core qml
CONFIG -= app_bundle
CONFIG += console …Run Code Online (Sandbox Code Playgroud) 我们在Unix/Linux中有类似的DebugBreak Windows API吗?我想调试一个守护进程,它应该在执行DebugBreak语句时打开NetBeans.提前致谢.
debugbreak ×8
debugging ×4
c++ ×3
assert ×2
c# ×1
macos ×1
node.js ×1
portability ×1
qt5 ×1
seh ×1
unix ×1
v8 ×1
visual-c++ ×1
x86 ×1
xcode ×1