当我尝试在Windows 7 64位+ Visual Studio 2015上构建OpenImageIO时出现此问题。在OpenImageIO库的编译二进制文件中存在一些问题,因此我想调试它的一些源代码以找到问题。但是断点没有击中。
具体来说,我用来调试OpenImageIO的应用程序代码是Tools\iconvert
,当我执行该行时代码崩溃了:
ImageInput *in = ImageInput::open (in_filename.c_str());
ImageInput::open
的实现包含在解决方案的项目OpenImageIO中的imageinput.cpp中。我在Debug配置下编译了两个项目,它可以生成调试信息。但是当我在第86行的ImageInput::open
定义处设置断点时,断点为白色表示它无效,并且提示说断点当前没有被击中,如下面的屏幕截图所示:
我检查了其他地方,比如参考属性,它清楚地表明iconvert链接到OpenImageIO库的Debug版本:
那么,为什么断点不能被击中?我该如何解决这个问题?如果您需要更多信息进行故障排除,请告诉我们。非常感谢。
答案 0 :(得分:0)
大约一年前,当我尝试使用PyCharm(在Windows上运行)远程调试在Autodesk Maya(在Linux上运行)中执行的python脚本时遇到了类似的问题。后来我设法弄清楚它是由于Linux的路径 - 它是在linux中的一个搜索路径中运行的旧python脚本,而不是我假设运行的源文件夹中的脚本。所以我认为这里的问题应该是一样的。
OpenImageIO依赖于dll格式的很多第三方库,所以昨天我将它们全部放入C:\ Windows \ system32以便于搜索。但是由于存在一些问题,今天我改变了CMake和rebuild的设置,我在重建过程中改变了主意,将新编译的dll放到OIIO的bin文件夹中(我不想弄乱系统目录)。为了使更改生效,我将此文件夹添加到PATH并从system32中删除了旧的有问题的dll。但我错过了一个 - 负责ImageInput :: open的OpenImageIO.dll!我太过信任我的记忆;我应该按创建日期对文件进行排序。
当然我起初并不知道它,所以根据我之前的经验,首先我检查了加载的dll是否是我刚建立的那个。这是通过VS2015中的菜单DEBUG-> Windows->模块完成的。啊哈,那个窗口清楚地显示它是加载的system32中的OpenImageIO.dll,这让我想起了发生了什么。所以我删除了(带移位)旧的dll和一切正常按预期工作 - 我终于使用VS2015在Windows 7 64位上从源头从头开始成功构建OpenImageIO,包括所有第三方库。