2011-10-05 122 views
0

我在OSX 10.7(Lion)上遇到Microsoft Office for Mac 2011中无处不在的EXC_BAD_ACCESS错误。最新的办公更新安装(14.3我相信这是)EXC_BAD_ACCESS“Office for Mac 2011”Excel宏MicrosoftOleautomation调试原因

我正在运行一个(相当大)的宏...从PC Office移植它。

将元素添加到集合时发生错误。没有什么花哨,并且在没有问题的情况下也可以在其他数十个地方使用。 (并没有从工作PC版本中修改它)。所以,虽然这可能是错误的关键,但我怀疑它与集合的内存有关 - 例如,也许它在这个特定的插入过程中在幕后执行realloc。

特别是,它将第二个元素插入到集合中。没有用户定义的类型。没什么特别的。添加一个字符串元素。插入的数据是犹太教。密钥ID是唯一的。面包和黄油收集使用。

另一个可能的嫌疑人可能是变量作用域(???)...也就是说,它可能使用了另一个子程序中类似命名的变量或者古怪的东西。

或者可能在子程序中使用的临时字符串是名义上的罪魁祸首?

如果我出注释此行,宏其余运行好(除了丢失的数据从容器毛刺所以这没关系处理......这可在正常运行空)

我寻求如何追踪问题的建议。并解决它的提示。

Mac上的内存页面64k就像它在PC上一样吗?

它可能是物理内存/虚拟内存/交换? (看起来与系统操作系统相关的过于一致)

也许excel对宏有内存限制上限?

如何利用异常时的核心转储来追踪问题?

(有经验的程序员,只是不熟悉OSX ......而丢失了所有我的PC开发工具叹息

回答

0

解决。

这不是集合。

通过一些“printf”调试,追踪了这个问题。或者至少找到了解决方案。

以下是对发生了什么的推测。

早些时候的变体阵列创建,填充,并传递到子程序...

Dim nameList(50) As Variant 
... populated ... 
Call SomeSub(nameList) 
... 
sub SomeSub(nameList) 

在子,所述变体阵列是使用迭代然后一个“对于每一个”环路(坠毁)

For outerLoopIndex=0 To 100 

    Dim currName 
    For Each currName In nameList 
     If testName Like currName Then 
      addToBucket = True 
      Exit For ' skip any others since found a site of interest 
     End If 
    Next currName 

Next outerLoopIndex 

它在外环的第一遍上正常工作。但是,数据会受到损坏,因此在第二次通过外部循环时发生EXC_BAD_ACCESS崩溃。

“修复”是显式声明为Variant:

Dim currName As Variant 
    For Each currName In nameList 
     ... 

或许这将帮助其他人遇到类似的问题。尝试显式声明变量。 Mac Excel似乎对这些事情更敏感。 :)