首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当前不会命中断点。VS2017

在Visual Studio 2017中,如果遇到断点没有被命中的情况,可能是由以下几个原因造成的:

基础概念

  • 断点:在调试过程中,程序执行到断点时会暂停,允许开发者检查程序状态。
  • 调试器:Visual Studio的调试器工具,用于跟踪程序的执行流程并分析其状态。

可能的原因及解决方法

  1. 断点未正确设置
    • 确保断点已经正确设置在可执行的代码行上,而不是在空白行或注释行。
    • 右键点击断点标记,选择“删除所有断点”后重新设置。
  • 编译器优化
    • 编译器优化可能导致代码在运行时与源代码不完全对应,从而跳过断点。
    • 在项目属性中,将“C/C++” -> “优化”设置为“禁用(/Od)”。
  • 调试信息缺失
    • 确保项目配置为生成调试信息。
    • 在项目属性中,检查“链接器” -> “调试”选项,确保“生成调试信息”设置为“是”。
  • 运行模式不正确
    • 确保是在“调试”模式下运行程序,而不是“发布”模式。
    • 在Visual Studio的工具栏中,检查解决方案配置是否为“Debug”。
  • 多线程问题
    • 如果程序是多线程的,可能需要设置线程特定的断点。
    • 在“调试”菜单中选择“窗口” -> “线程”,查看当前活动的线程,并在相应的线程上设置断点。
  • 代码热替换
    • 如果在调试过程中修改了代码并重新编译,可能需要重启调试会话。
    • 停止调试,重新启动程序。
  • 第三方插件干扰
    • 某些第三方插件可能会干扰调试过程。
    • 尝试禁用所有非必要的插件,然后重新启动Visual Studio并尝试调试。

示例代码

假设我们有一个简单的C#控制台应用程序,如下所示:

代码语言:txt
复制
using System;

namespace DebugExample
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Starting the application...");
            int result = Add(3, 5);
            Console.WriteLine($"The result is {result}");
        }

        static int Add(int a, int b)
        {
            return a + b; // 在这里设置断点
        }
    }
}

调试步骤

  1. Add方法的return语句处设置断点。
  2. 确保项目配置为“Debug”模式。
  3. 启动调试(按F5或点击“开始调试”按钮)。
  4. 程序执行到断点时应会暂停,允许检查变量值等。

通过以上步骤,通常可以解决断点未命中的问题。如果问题仍然存在,建议检查Visual Studio的安装和更新状态,确保所有组件都是最新的。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Visual Studio 调试系列3 断点

    调试时,执行的断点处暂停,在执行该行上的代码之前。 断点符号显示黄色箭头。 ? 当调试器在断点处停止时,您可以查看应用程序,包括变量值和调用堆栈的当前状态。...不同编程语言的“更改时”字段的行为不同 : 对于本机代码,调试器不会考虑更改,因此不会命中第一次计算断点条件的第一次计算。...对象 ID 创建弱引用,且不会阻止对象被垃圾回收。 它们仅对当前调试会话有效。...此外可以在消息中使用以下特殊关键字: $ADDRESS -当前指令 $CALLER -调用函数名 $CALLSTACK -调用堆栈 $FUNCTION -当前函数名 $PID -进程 id $PNAME..."… 当前源代码是从...中内置的版本不同" 如果源文件已更改,并且源与正在调试的代码不再匹配,调试器不会设置断点在代码中默认情况下。 通常情况下,此问题发生时更改源文件,但不重新生成的源代码。

    5.4K20

    Linux下GDB调试指令总结

    摘要 之前写C++的一些程序都是在windows下,直接使用VS2017的傻瓜式编译器,最近尝试摸索在linux进行C++程序的编译,有了一些成果!特此总结!...,将步进到函数中去运行,而 next 则直接调用函数,不会进入到函数体内。...breakpoints) :显示当前程序的断点设置情况 delete breakpoints:清除所有断点: 03 查看源代码: list :简记为 l ,其作用就是列出程序的源代码,默认每次显示10...05 打印表达式 print 表达式(简记p): 其中“表达式”可以是任何当前正在被测试程序的有效表达式,比如当前正在调试C语言的程序,那么“表达式”可以是任何C语言的有效表达式,包括数字,变量甚至是函数调用...如:watch a whatis :查询变量或函数 info function:查询函数 扩展info locals:显示当前堆栈页的所有变量 06 查询运行信息 where/bt :当前运行的堆栈列表

    4.6K20

    Windows下node-gyp查找VS安装路径简单解析

    Windows下的VS,macOS以及Linux下的make)来决定生成什么样的项目结构(Windows下的sln以及vcxproj、macOS以及Linux下的make项目)这一步是configure配置过程,不会进行源码的编译...进入configure.js,一下就可以看到我们期望的东西(图片顶部显示了js代码位置): 如果当前进程平台是win32(Windows操作系统标识),则会引入模块find-visualstudio。...findVisualStudio2017OrNewer 该函数的签名表示,这个函数是通过调用PowerShell脚本来获取关于VS2017或是更高版本VS的安装信息。...上图中,我模拟了node-gyp中查询VS2017以上版本的函数,通过Debug方式断点调试: ps变量值为:C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe...findVisualStudio2015/2013 通过源码可以知道,最终都调用了方法:findOldVS,并且还知道,nodejs的主版本大于等于9时,根本不会查找VS了。

    73030

    调试用到的几种断点

    另外,VSCode的断点是即添(改)即用的,所以配合条件断点能干很多事情: 1.2 命中次数中断 当命中次数满足条件才会中断。...不过,记录点并不会污染代码。 3. 异常断点 出现异常后才会中断的断点。会分为捕获和未捕获两种。 异常断点的好处自然就是能够知道出现异常时的一些变量信息、调用堆栈信息。...4.内联断点 只有当执行到与内联断点关联的行时,才会命中内联断点。(不知道为什么网上都说是列) 把光标移动到要断的位置,然后点击Shift + F9。或者点击运行>新建断点。...2.3 node removal (节点移除) 当前节点被移除时触发。 断点 当发送请求的时候中断。如果不输入内容则是所有请求都中断,如果输入内容,则是当url中包含该内容的请求会中断。 请求断点不会考虑请求能不能发送到服务器。而是在发送请求的时候中断。

    1.4K10

    VisualStudio 断点调试详解

    这个按钮的功能和禁用断点按钮的功能一样,如果有用户勾选某些断点的时候就删除被勾选的断点,否则就删除当前显示的所有断点 另外一个删除按钮是只删除当前选中项,对于被勾选的断点不会被删除,几个按钮的功能请看下图...另一个设置方法是在断点窗口里面右击对应的断点,点击设置就可以显示设置窗口 请勾选条件选项,此时可以添加很多条件 命中数 点击条件下拉可以选命中数,可选的是当命中数是多少的时候,或大于多少等,表示在这个断点被经过了多少次的时候进入...如我选择命中数等于 3 那么将会在代码经过这个断点这一行的第三次进入断点 ?...在断点的中途可以选择重置次数 又如我在进入一个循环,我想在每 100 次的时候进入暂停让我看一下,我可以添加命中数选数倍于 100 就可以 条件表达式 在条件表达式是比较复杂的功能,可以将当前的局部变量和实例变量...在断点窗口提供搜寻的功能,如下图在搜寻输入框输入字符串按下回车将会在窗口显示满足条件的断点,注意此时不满足条件的断点不会失效,只是没有显示 ?

    2.5K20

    这样Debug,排查问题效率大大提升...

    因为进入断点的请求,都不是我们想要的;这个时候可以对断点设置条件,当前请求中必须有满足什么条件才会进入Debug模式。...1、点击程序的目标行旁边,生成一个小红点;2、右键小红点,可以在condition那里设置程序中的条件; 举个例子,如下当用Debug运行的时候,是不会走到断点的。...1、默认只断点一次;2、断点的时候不挂起整个系统; 如下,通过断点管理器器,进入进来,或者右键断点,然后点击more可以进入进来 设置挂起选项,只挂起当前正在调试的线程,然后再下面勾选一旦命中移除断点。...静态断点,只是想看程序会不会运行到这里来(类似于动态日志) 想确定请求能不能走到某个位置,但是又不想进入debug模式,感觉太重了,能不能如果经过这一行就直接打个日志呢?...在断点配置里面勾选,命中后打日志,也可以自己加一些其他的输出: 不要挂起程序 命中处打日志 分组管理断点(系统不同链路的断点) 系统常用的链路主要就几条,而常调试问题的地方也只有几处,可以把这几处位置的断点管理起来

    48110

    C#使用线程窗口调试多线程程序

    优点:不会干扰程序的执行,特别是对网络的多线程通信。 缺点:每次都需要打开日志文件以查看进程运行的信息。 2、利用断点进行调试。...一旦断点命中并且你在你想要的线程中,在Visual Studio线程窗口中(在调试,调试 - > Windows - >线程时),Ctrl+ A(选择所有线程),然后Ctrl+单击您当前所在的线程。...最正确和最有用的方法是: 在断点窗口中按Ctrl + A(选择所有断点)。 右键单击并选择“过滤器...”。 输入“ThreadId =(当前线程ID)”。...在Visual Studio 2015及更高版本中,过程类似于: 在断点窗口中按Ctrl + A(选择所有断点)。 右键单击并选择“设置...”。...选中“条件”,然后在下拉列表中选择“过滤器” 输入“ThreadId =(当前线程ID)”。 所以所有线程都被执行,但调试器仅在当前线程上命中。

    89820

    C++常见的三种内存破的场景和分析

    接下来要介绍的一个样例程序,就是隐藏于代码中的一个问题,如果从VC6升级到VS2017的时候会带来问题吗?...这个字符串会不会打印出来呢? 可以发现这段程序在VC6中可以打印出来,但是在VS2017中却打印不出来了。...程序的问题所在m_tRecordTime采用的是int类型,默认为32位,那么其地址作为time_t time( time_t *destTime );函数实参后,在VC6中time_t本身为32位自然也不会出错...,但是在VS2017中因为time_t为64位,则time((time_t *)(&m_tRecordTime));后写入了一个64位的值。...因为内存上溢的比较多,一般可以查看下定义在当前出现问题的变量的低地址出的变量操作,是否存在可疑的地方。

    66040

    Python | Debugger和pdb,鸡肋否?

    箭头表示当前帧,它决定了大多数命令的上下文。 d(own) [count] 移动当前帧计数(默认的)水平在堆栈跟踪下(到较新的帧)。...如果存在第二个参数,那么它是一个表达式,它必须在断点被赋予之前评估为true。 如果没有参数,请列出所有中断,包括每个断点,断点已被命中的次数,当前忽略计数以及相关条件(如果有)。...tbreak [([filename:]lineno | function) [, condition]] 临时断点,在首次命中时会自动删除。参数与之相同break。...禁用以空格分隔的断点编号列表给出的断点。禁用断点意味着它不会导致程序停止执行,但与清除断点不同,它将保留在断点列表中并可以(重新)启用。...非零时,每次到达断点时都会减少计数,并且不会禁用断点,并且任何关联的条件计算结果为true。

    1.5K20

    LyScript 获取上或下一条汇编指令

    插件地址:https://github.com/lyshark/LyScript 获取下一条汇编指令: 下一条汇编指令的获取需要注意如果是被命中的指令则此处应该是CC断点占用一个字节,如果不是则正常获取到当前指令即可...1.我们需要检查当前内存断点是否被命中,如果没有命中则说明此处我们需要获取到原始的汇编指令长度,然后与当前eip地址相加获得。...2.如果命中了断点,则此处有两种情况 1.1 如果是用户下的断点,则此处调试器会在指令位置替换为CC,也就是汇编中的init停机指令,该指令占用1个字节,需要eip+1得到。...1.2 如果是系统断点,EIP所停留的位置,则我们需要正常获取当前指令地址,此处调试器没有改动汇编指令仅仅只下下了异常断点。...# 说明是EIP并且命中了断点 if local_eip == eip: dis_size = dbg.get_disasm_operand_size(eip)

    42920
    领券