几年前,我在Borland C++ Builder中使用了一个小小的C++。从记忆中看,大概就像
#define BREAK_IF_DEBUGGING asm(0xA3);或者类似的东西。它依赖于0XA3 (或其他什么)作为中断的op代码,Borland用来触发断点。
我可以在Eclipse中做同样的事情吗?(我可能会把它包装在几个#idef ECLIPSE和#ifdef TESTING中)
我希望在这里实现的是
当然,在发布版本中,代码会编译为零。如果我使用Ctrl-F11运行单元测试,那么我不希望触发一个断点(因为Ctrl-F11是“运行”),如果我使用
。
为什么?因为我想设置和忘记。只需将其中一个放入每个错误段(或将其嵌入到我的LOG_ERROR宏中)即可。
通常,当我选择初始断点时,为时已晚,因此这个宏表示“我想要运行到X行,但是如果执行首先通过这些错误分支之一,我想在那里停止&四处嗅”。
不管你喜不喜欢这个主意,你能告诉我怎么做吗?
发布于 2010-02-22 07:56:40
关于
#define BREAK_IF_DEBUGGING asm("int3");( int和3之间缺少空间是有意的: int 3的编码方式不同于其他中断,gnu汇编程序用这种特殊的语法标记这种差异)
发布于 2010-02-22 07:49:55
您可以使用Windows函数IsDebuggerPresent (请参阅http://msdn.microsoft.com/en-us/library/ms680345%28VS.85%29.aspx)检查调试器是否附加到您的进程。
如果附加了调试器,则可以使用breakpoint函数触发断点。
发布于 2010-02-22 07:55:33
如果您使用的是unix操作系统,则可以执行以下操作:
raise(SIGTRAP); https://stackoverflow.com/questions/2309465
复制相似问题