【问题标题】:Visual studio 2015: breakpoint will not be hit, no symbols loaded for this documentVisual Studio 2015:不会命中断点,没有为此文档加载符号
【发布时间】:2017-06-08 02:43:51
【问题描述】:

这个问题是我尝试在Windows 7 64 bit + Visual Studio 2015上构建OpenImageIO的时候出现的。OpenImageIO库的编译二进制有一些问题,所以我想调试它的一些源代码来定位问题。但是断点没有命中。

具体来说,我用来调试OpenImageIO的应用代码是Tools\iconvert,当我执行到该行时代码崩溃:

ImageInput *in = ImageInput::open (in_filename.c_str());

ImageInput::open 的实现包含在解决方案的 OpenImageIO 项目中的 imageinput.cpp 中。我在调试配置下编译了这两个项目,它可以生成调试信息。但是当我在第86行ImageInput::open的定义处设置断点时,断点为白色表示无效,提示当前没有命中断点,如下图所示:

我检查了其他地方,例如明确表明 iconvert 链接到 OpenImageIO 库的调试版本的参考属性:

此外,调试配置设置正确(据我了解):

那么,为什么断点不能命中?我应该如何解决这个问题?如果您需要更多信息来解决问题,请告诉我。非常感谢。

【问题讨论】:

  • 您是否能够构建整个项目或解决方案?
  • 是的,我构建了OpenImageIO的整个解决方案。

标签: visual-studio-2015 breakpoints debug-symbols


【解决方案1】:

大约一年前,我在尝试使用 PyCharm(在 Windows 上运行)远程调试在 Autodesk Maya(在 Linux 上运行)中执行的 python 脚本时遇到了类似的问题。后来我设法弄清楚这是由于 Linux 的路径造成的——它是运行在 linux 中的一个搜索路径中的旧 python 脚本,而不是我假设正在运行的源文件夹中的脚本。所以我觉得这里的问题应该是一样的。

OpenImageIO 依赖于很多 dll 形式的第三方库,所以昨天我把它们都放到了 C:\Windows\system32 以方便搜索。但是由于出现了一些问题,今天我改变了CMake的设置并rebuild,我在rebuild过程中改变了主意,将新编译的dll放到OIIO的bin文件夹中(我不想弄乱系统目录)。为了使更改生效,我将此文件夹添加到 PATH 并从 system32 中删除了旧的有问题的 dll。但是我错过了一个——OpenImageIO.dll,它负责ImageInput::open!我太相信自己的记忆了;我应该按创建日期对文件进行排序。

当然一开始我并不知道,所以根据我之前的经验,我首先检查了加载的dll是不是我刚刚构建的那个。这是通过 VS2015 中的菜单 DEBUG->Windows->Modules 完成的。啊哈,那个窗口清楚地显示它是加载的 system32 中的 OpenImageIO.dll,这让我想起了正在发生的事情。所以我删除了旧的 dll(通过 shift),现在一切都按预期工作了——我终于成功地在 Windows 7 64 位上使用 VS2015 从头开始​​构建 OpenImageIO,包括所有第 3 方库。

【讨论】:

    猜你喜欢
    • 2016-09-24
    • 1970-01-01
    • 2015-12-20
    • 2011-09-15
    • 2015-01-23
    • 1970-01-01
    • 2011-02-12
    • 2012-09-21
    • 2011-08-13
    相关资源
    最近更新 更多