c++ - 在调试器中的函数评估期间中断

标签 c++ visual-studio-2010 debugging

我正在尝试让它工作:http://msdn.microsoft.com/en-us/library/ms171381%28v=vs.100%29.aspx

更具体地说,如前所述on this other page , 当使用即时窗口调用方法时,“如果函数或子例程包含断点,Visual Studio 将在适当的点中断执行。

除了...它没有,至少对我而言。你可以用这个虚拟的 C++ 测试用例来试试:

#include "Windows.h"

void dbgbreak()
{
    DebugBreak(); // set a second breakpoint here
}

int main ()
{
    int i = 0;
    i++; // set a first breakpoint here
    return i;
}

设置源代码中提到的断点并运行。当调试器停止在 i++ 时,从即时窗口调用 dbgbreak()

对我来说,调试器不会再次停止,即使有两个原因(调用方法中的显式第二个断点,以及 win32 API DebugBreak() 应该触发断点的事实)。

这是预期的行为吗?这似乎与文档所说的完全相反……我是不是误会了什么?

最佳答案

好吧,这确实有效,只是不是您希望的那样。将函数更改为:

void dbgbreak()
{
    OutputDebugString(L"Before\n");
    DebugBreak();
    OutputDebugString(L"After\n");
}

当我使用即时窗口时,我看到了这个:

dbgbreak()
Before
The evaluation was aborted because an unhandled exception occurred.

非常准确,DebugBreak() 生成异常。调试器通常 会截取它以使程序进入中断状态。问题是,它已经处于中断状态。缺少的功能是调试器不支持嵌套中断状态。可以原谅的是,这应该很难实现,因为 Windows 调试 api 不支持它。

请注意,您链接的 MSDN 页面讨论的是托管代码。它使用了一种非常不同的调试器。 CLR 启动了一个专用线程,调试器使用该线程评估监视表达式和即时命令,这对它有很大帮助。并支持 Debugger.Break() 语句。 native 代码中不存在任何类似内容,托管代码是工具构建者的乐趣。

关于c++ - 在调试器中的函数评估期间中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17286179/

相关文章:

c++ - ^ =在c/c++中是什么意思?

c++ - 获取数字最左边两位的值的最便宜方法是什么?

c++ - 我无法在 openCV 中运行 camshift 演示

MYSQL - 字符串长度20,字段接受varchar(15),没有生成错误?

android - 线程对象在完成后未被垃圾回收

c++ - 如何编写正确的 std::initializer_list 构造函数

c++ - VS2010 改变路径宏

visual-studio-2010 - 如何替换 Visual Studio/TFS 2010 中的合并工具

asp.net - SqlCommand占位符参数: "Incorrect syntax near ' ?'" and "Must declare the scalar variable @param"?

java - Eclipse 调试器 toString() 调用