C ++查找指针错误

时间:2010-06-07 10:39:13

标签: c++ windows debugging com pointers

我目前正处于一个长期存在错误的项目中,现在我怀疑,除其他外,代码中存在指针错误。

该程序使用COM以本机C ++编写,并使用进程外COM服务器。

有人可以给我一些提示,告诉我如何找到这些错误吗?

是否有特定要注意的事项,方法等等......

4 个答案:

答案 0 :(得分:1)

您可以尝试使用AQTime,DevPartner或IBM Rational Purify等内存分析器。我认为还有很多其他的。

答案 1 :(得分:1)

我在这里有几点建议:

  1. 你怎么知道有一个指针错误?你为什么不把它放在调试器中,然后看看程序崩溃的位置?那将是一个开始。监视有问题的变量。
  2. 是什么让你觉得某些东西在代码的COM部分搞砸了?相反,我想这里有2个进程在运行(可能在同一台机器上也可能不在同一台机器上),你应该并行运行这些进程,然后看看它们是如何相互响应的 - 我大多肯定会出现问题。应用程序代码中的数据处理。 COM是一种相当成熟的技术。
  3. 也许你正在进行不正确的API调用,或者就像微软有1000个参数的所有事情一样,你可能需要在那里进行调整。
  4. 希望这会有所帮助。您也可以尝试使用远程调试等所有内容,或者使用Vtune或其他东西来检测代码,但是让一开始就让事情变得简单。

    Arpan

答案 2 :(得分:1)

BoundsChecker有一个名为Wait for Process的运行时模式。这使您可以让BC等待DLLHOST进程启动,并在进程启动时附加BC核心。对于指针错误,您将使用BC的最终检查模式。这意味着您添加编译时本机检测,如果您检测整个应用程序,这可能会非常慢,但如果只检测COM服务器及其依赖项,则可能非常有效。请关注MF Developer下的http://www.microfocus.com,了解有关2月初DPS 10.5发布的新闻。免责声明,我在DevPartner团队工作,所以请考虑这是我无耻的插件。我们对10.5版本及其64位支持的意图是确保我们能够处理纯C ++ x64应用程序,其次是混合.NET应用程序,以及BC下的纯.NET应用程序。套件中的其他分析器采用了另一种方式,最重要的是.NET。希望您找到10.5适合您的开发环境和故障排除需求。

答案 3 :(得分:0)

这是一个非常广泛的主题。

您可以做的最好的事情是使用仪器和跟踪平台,它允许您查看所有分配,内存泄漏和内存损坏,但这可能非常难以设置和耗时,具体取决于项目的大小以及构建系统的复杂性。

您还可以插入自定义分配和解除分配代码(请参阅microsoft的debug_new(我认为)作为示例。

对于特定于COM的跟踪,我不确定是否有任何现有的解决方案。如果您使用ATL,您可以使用自己的插件/替换/扩展智能指针类(如CComPtr)。