如何在特定对象的特定方法中设置断点

How to set a breakpoint in a specific method of a specific object?

本文关键字:设置 断点 方法 对象      更新时间:2023-10-16

我的c++项目中有一个严重的错误。有一个类

class SomeClass {
    ...
    std::string *someString;
    ...
}
这是一个构造函数
SomeClass(...) {
    ...
    someString = new std::string("");
    ...
}

问题是,之后我只操作那个特定的字符串,不修改指针的值。我一直给这个字符串赋值不同的字符串,比如

*someString = "whatever";
someString->assign("whatever");
*someString += 'a';

应用程序是多线程的,有一个非常讨厌的小故障。在某些时候,应用程序会崩溃。调试器显示变量someString有一个坏指针。我不知道这是怎么可能的

delete someString;

永远不会被调用。

我已经查看了那个字符串指针的所有引用,我可以告诉你的是:


  1. 该指针永远不会被赋值给任何其他对象(以后可能会被删除)。
  2. 该字符串的指针值从未以任何方式改变(调试器显示'Bad Ptr')。
  3. 其他类变量看起来很好,就像他们应该的那样。
因此,我需要找到一种方法来检查何时在特定对象上调用析构函数。

那么,是否有一种方法可以在特定对象集的析构函数(或任何其他方法)上设置断点(我正在visual studio 2010专业版上工作)?

如果你是多线程的,考虑实现一个锁定机制…(如果您还没有这样做的话)为您的string成员。很有可能一个线程试图写一个指针,而这个指针正在另一个线程中被重新分配…或者类似的东西。更多的代码将帮助我们在更深的上下文中理解问题。