0

我正在处理的一些代码遇到问题。此代码正在基于 linux 的系统上运行,我收到的错误如下:/root/cvswork/pci_sync_card/Code/SSBSupport/src/CRCWbHfChannel/CRCWbHfMSBSimulator.cpp:447: virtual void CCRCWbHfMSBSimulator::Process():断言“pcBasebandOutput”失败。

我尝试单步执行此代码以找出失败的原因,但我似乎无法弄清楚。不幸的是,我有太多文件无法在此处真正共享代码(逐步完成 pcBasebandOutput 分配需要相当长的时间)。我知道这是一个比真正可以问到的更复杂的问题。我的主要问题是:

  1. 是我的断言(pcBasebandOutput);需要的代码行?我只问是因为在 Visual Studio 上运行此代码时,我的程序的结果是可取的。
  2. 当它评估我的 pcBasebandOutput 变量时,为什么它会将其评估为假?这是否是说实际上没有为 pcBasebandOutput 分配任何值?或者可以为它分配一个值,但它不是正确的类型(指向两个变量的结构的指针,这两个变量都是双精度的)?

谢谢!

4

2 回答 2

1

assert检查逻辑条件。如果条件为 ,则断言失败false。所以写assert(cond)在逻辑上和写是一样的:

if (!cond)
{
    assert(false);
}

我不建议您assert从代码中删除,因为它是一个守卫,告诉您某些事情没有按照预期的方式进行。忽略这一点并不是一个好主意,因为它可能会在以后射你一腿

于 2012-07-16T14:21:28.537 回答
1
  1. 只有你能知道

  2. pcBasebandOutput 的类型是什么?也许它没有正确初始化?

assert 的主要目的是让您的 IDE 在 assert 命中的地方进入调试会话。从那里您可以读取所有变量并查看调用堆栈/线程。其他解决方案(除了使用调试器)是添加大量日志记录,这在线程环境中可能会自行导致问题(日志记录非常慢)。

于 2012-07-16T14:22:51.713 回答