【发布时间】:2013-10-09 21:45:50
【问题描述】:
我有一个包含多个项目的 Visual Studio 2012 解决方案,其中一些在 C 中,一些在 Fortran 中(使用 Intel Composer XE 2013)。我经常使用 iso_c_binding 实用程序从 Fortran 代码调用 C 代码,但我注意到我无法有效地调试 C 代码。在调试 Fortran 代码时,我可以很好地查看变量的内容,但是如果我进入 C 代码,它们会突然失去理智。大多数变量只是声称未定义;传递给函数的任何内容都将包含不正确的值(但它仍然可以区分指针和对象/POD)。
我仍然可以单步执行代码;它似乎主要遵循预期的执行顺序,但有时它确实会跳动一点,这是我在使用 gdb 在 Linux 上调试编译器优化代码时所熟悉的。
我有一个单独的解决方案,它也有 C 和 Fortran 项目。两者都从第一个解决方案调用到同一个 C 项目,在这两种情况下,我都可以再次成功调试,直到我从第一个解决方案进入 C 项目,此时我遇到了同样的问题。
我做错了什么?
【问题讨论】:
-
听起来你一针见血。 VC 在将局部变量和参数优化到寄存器等方面非常激进。我只能建议您通过反汇编窗口进行调试,如果您有调试符号,它至少会向您显示每一行发生的情况。
-
所有优化都关闭了吗?
-
@kotlomoy,无论优化属性设置为什么,我都遇到了这个问题。如果还有其他事情要检查,请告诉我。
-
@WhozCraig,感谢您的提示。反汇编器确实可以工作,但我当然希望能够使用完整的调试体验并不是没有道理的。我可以为我的顶级 C 项目获得它,但当他们调用另一个项目时却不能,所以我知道它应该是可能的。
标签: c visual-studio debugging visual-studio-2012 visual-studio-debugging