ana*_*and 26 c++ debugging breakpoints conditional-breakpoint visual-studio
我刚才知道有数据断点.我使用Visual Studio在C++工作了5年,从未使用过数据断点.
有人可以了解一下数据断点是什么,何时使用它们以及如何在VS中使用它们?
根据我的理解,当我们想要检查变量值的变化时,我们可以设置数据断点.在这种情况下,我们可以使用变量值的条件设置数据断点.
还有其他例子吗?
Sho*_*og9 57
好醇" 丹尼尔LeCheminant具有坚实的答案在哪一个数据断点做,所以我会在一些轶事,突出有用的用途折腾:
在那里,你知道任何情况下什么会改变,但很少或不知道哪里的代码改变它的生命(因为否则你可以简单地使用一个条件断点).特别,
"不可能"的情景 -程序崩溃,因为变量X是NULL,当变量X不应该是NULL因为没有代码的任何地方曾经把变量X来NULL.在初始化的代码中放置一个普通断点X,当它被命中时,设置一个数据断点来监视更改NULL.更常见的情况是内存过早发布,并且仍然存在指向它的指针:使用数据断点来找出释放内存的人.
繁琐的场景 - 第三方库正在为您的数据结构做坏事,讨厌,可怕的事情.你知道它正在发生,因为有人诋毁你的数据,显然你的代码是完美的.但你不知道在哪里或什么时候.当然,您可以单步执行一个兆字节的反汇编DLL ...但是为什么要麻烦,当您可以在数据上设置数据断点时,请坐下来等待它被破坏!
Heisenbugs - 类似于不可能的场景,但是当你仔细观察时它们会消失,因此正常的断点 - 甚至是有条件的断点 - 都是无用的.时序和用户输入敏感逻辑特别容易受到这种情况的影响.由于数据断点不需要调试器实际中断,直到时机成熟,假设您可以提出仅在难以捉摸的bug实际发生时才会更改的内存位置,您可以使用数据断点为其设置陷阱Heisenbug并在 flagrante delicto中捕获它.
意大利面场景 - 在旧的,腐烂的代码库中常见,其中全局数据随处可访问.是的,你可以使用普通的'条件断点......但你需要数百个.数据断点使其变得简单.