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

时间:2013-05-06 11:02:40

标签: c++ visual-studio-2010 debugging breakpoints

我的C ++项目中有一个令人讨厌的错误。有一个班级

class SomeClass {
    ...
    std::string *someString;
    ...
}

这是一个构造函数

SomeClass(...) {
    ...
    someString = new std::string("");
    ...
}

事情是,之后我只使用该特定字符串操作,而不修改poiner值。我一直为该字符串分配不同的字符串,如

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

应用程序是多线程的,并且有一个非常令人讨厌的故障。在某些时候,应用程序崩溃。调试器显示变量some​​String具有A BAD POINTER。我不知道这是怎么可能的

delete someString;

永远不会被打电话。

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

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

    那么,有没有办法在特定的一组对象上的析构函数(或任何其他方法)上设置断点(我正在使用visual studio 2010专业)?

1 个答案:

答案 0 :(得分:1)

如果您是多线程,请考虑为您的字符串成员实现锁定机制...(如果您尚未执行此操作)。很可能一个线程试图写入一个指针,该指针正在另一个线程中重新分配......或类似的东西。多一点代码可以帮助我们在更深层的背景下理解问题。