今天使用opencv里的mat想要保存数据里边的像素的平均值和标准差;

但是编程好了之后会出现下面的问题,不能找到pdb file 。下面将提供三种解决方法以及产生问题的原因。

程序也运行不出来,整个人都不好了。后来上贴吧和网上搜,有很多种解决办法,但是对我最用的是第1个:

方法1.首先确认是不是建立的空项目而不是win32位控制台项目,如果建立的是空项目,建议把空项目改成win32位控制台项目,问题一下子就解决了。

方法2.还有种说法是其实问题在于,在空项目中不生成调试文件pdb,所以无法调试。

要让项目生成pdb文件,需要更改:

项目属性,configuration properties->linker->Generate Debug Info 从 no 改为 yes

但这样还是不够的,还需要更改:

项目属性,configuration properties->c/c++->debug information format为/ZI

项目属性,configuration properties->c/c++->optimization为Disabled

因为为了生成这个文件,需要设定debug信息的格式并关掉O2,还要更改linker生成调试信息的开关

在运行FBX的sample程序时发现提示:debug information of xxx.exe cannot be found or not match ,于是首先在网上找了下相关资料,得到如下建议:

1) Goto Project->HelloWorld Properties
2) On the left expand "Configuration Properties"
3) Expand "C/C++"
4) On the left, Select "General"
5) On the right, change "Debug Information Format" to "Program Database For Edit And Continue (/ZI)"
5) On the left, Select "Optimization"
6) On the right, change "Optimization" to "Disabled (/Od)"
7) On the left, expand "Linker"
8) On the left, select "Debugging"
9) On the right, change "Generate Debug Info" to "Yes"
10) Click ok
11) Set your breakpoints
12) Rebuild your application

实际上按照以上操作以后,问题仍然存在,因为对Visual配置不是很熟,于是继续看其他人的文章,觉得有可能是.pdb文件的原因,因为pdb文件是Visual存储调试信息的地方,而visual在运行时确实有如下提示:

'ImportExport.exe': Loaded 'C:/Program Files/Autodesk/FBX/FbxSdk/2012.1/bin/ImportExport/win32/net2010/debug/ImportExport.exe', Cannot find or open the PDB file

即找不到pdb文件,因此无法调试。

在visual里找到pdb相关的配置选项,共2个如下:

configuration property->c/c++->output files->program database file name

这是编译时产生的pdb文件的输出位置,vs在编译后会将该位置符合$(TargetName).pdb格式的文件复制到configuration property->general的output directory目录中(不知道是哪里的设置起作用),作为运行时debug信息。不过这一pdb文件包含的信息包括类型信息,但不包括函数定义等符号信息。因此,即使每个源文件都包含公共头文件(如 <windows.h>),这些头文件中的 typedef 也只存储一次,而不是在每个 OBJ 文件中都存在(见下面的定义)。因此这个pdb文件是不足以做调试之用的。

configuration property->linker->debugging->generate program database file

这是链接时链接器产生的pdb文件的输出位置,它包含项目的 EXE 文件的调试信息。该 文件包含完整的调试信息(包括函数原型),而不仅仅是在 上一个.PDB 中找到的类型信息。

这两个 PDB 文件都允许增量更新。链接器还在其创建的 .exe 或 .dll 文件中嵌入 .pdb 文件的路径。

对照项目配置,很快发现问题所在。output files->program database file name里设置的文件名符合$(TargetName).pdb的格式,因此被复制到output directory目录中,而linker->debugging->generate program database file设置的文件名也刚好是这个位置,因此就没有被复制进来,所以“鹊巢鸠占”引起的后果是,包含完整调试信息的9mb大的pdb文件没有被如约创建,而1mb大的pdb文件被错误的复制倒了不该放的地方,自然.exe文件就找不到debug信息了。

方法3.Ctrl + F5运行就可以了。或者在cmd命令行下执行程序。或者"Microsoft Symbol Servers"勾上(Tools -> Options -> Debugging -> Symbols).

 以下作为参考:

VISUAL c+中的pdb文件及其作用

程序数据库 (PDB) 文件保存着调试和项目状态信息,使用这些信息可以对程序的调试配置进行增量链接。当以 /ZI 或 /Zi(用于 C/C++)生成时,将创建一个 PDB 文件。

在 Visual C++ 中,/Fd 选项用于命名由编译器创建的 PDB 文件。当使用向导在 Visual Studio 中创建项目时,/Fd 选项被设置为创建一个名为 project.PDB 的 PDB。

如果使用生成文件创建 C/C++ 应用程序,并指定 /ZI 或 /Zi 而不指定 /Fd 时,则最终将生成两个 PDB 文件:

VC80.PDB (更笼统地说就是 VCx0.PDB,其中 x 表示 Visual C++ 的版本。)该文件存储各个 OBJ 文件的所有调试信息并与项目生成文件驻留在同一个目录中。

project.PDB 该文件存储 .exe 文件的所有调试信息。对于本机 C/C++代码,它驻留在 /debug 子目录中。对于托管代码,它驻留在 /WINDEBUG 子目录中。

每当创建 OBJ 文件时,C/C++ 编译器都将调试信息合并到 VCx0.PDB 中。插入的信息包括类型信息,但不包括函数定义等符号信息。因此,即使每个源文件都包含公共头文件(如 <windows.h>),这些头文件中的 typedef 也只存储一次,而不是在每个 OBJ 文件中都存在。

链接器将创建 project.PDB,它包含项目的 EXE 文件的调试信息。project.PDB 文件包含完整的调试信息(包括函数原型),而不仅仅是在 VCx0.PDB 中找到的类型信息。这两个 PDB 文件都允许增量更新。链接器还在其创建的 .exe 或 .dll 文件中嵌入 .pdb 文件的路径。

Visual Studio 调试器使用 EXE 或 DLL 文件中的 PDB 路径查找 project.PDB 文件。如果调试器在该位置无法找到 PDB 文件或者如果路径无效(例如,如果项目被移动到了另一台计算机上),调试器将搜索包含 EXE 的路径,即在“选项”对话框(“调试”文件夹,“符号”节点)中指定的符号路径。调试器不会加载与所调试的二进制不匹配的 PDB。

解决Cannot find or open the PDB file问题的更多相关文章

  1. Cannot find or open the PDB file问题的解决

    'testcv.exe' (Win32): Loaded 'D:\Documents\Visual Studio 2013\Projects\testcv\x64\Debug\testcv.exe'. ...

  2. vs2010调试程序出现“Cannot find or open the PDB file”

    项目中源程序编写好以后, (一个简单的小程序) #include int main(void) { int age; int day; age = 24; printf("tom is %d ...

  3. 解决 cocoapods diff: /../Podfile.lock: No such file or directory 问题

    解决cocoapods diff: /../Podfile.lock: No such file or directory google一圈之后,找到两个解决方案: 方案一:
 关闭Xcode,重新执 ...

  4. C# dmp debug, can't load pdb file

    1.  Project->Properties->Build->Advance, Debug Info : Full/pdb-only . set to [none] will no ...

  5. ubuntu 16.04 + eigen3 安装(解决 fatal error: Eigen/Core: No such file or directory)

    1.安装 sudo apt-get install libeigen3-dev 2. 解决 fatal error: Eigen/Core: No such file or directory 当调用 ...

  6. 解决adb push时出现的"Read-only file system"问题

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  7. 解决无法运行Terminator出现以下问题: File "/usr/bin/terminator"...SyntaxError: invalid syntax

    在安装或者启动Terminator时可能出现这个问题: lin@Dev:~$ terminator File "/usr/bin/terminator", line 123 exc ...

  8. Python编码错误的解决办法SyntaxError: Non-ASCII character '\xe5' in file

    [现象] 在编写Python时,当使用中文输出或注释时运行脚本,会提示错误信息: SyntaxError: Non-ASCII character '\xe5' in file ******* [原因 ...

  9. 解决:xxx is not in the sudoers file.This incident will be reported.的解决方法

    Linux中普通用户用sudo执行命令时报”xxx is not in the sudoers file.This incident will be reported”错误,解决方法就是在/etc/s ...

随机推荐

  1. json 解析

    纠结了两天的json数组反序列化,终于在同事的帮助下,找到方法了,特作笔记如下: using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Sy ...

  2. (转)C# 使用BackgroundWorker

    本文转载自:http://blog.csdn.net/andrew_wx/article/details/6615077 该例子为使用BackgroundWorker在TextBox文本中产生一个10 ...

  3. SQL Server附加数据库文件出错

    场景: 新装一台数据库服务器,装好后,附加数据库时出错.附加前的数据库架构没有在新服务器上安装.新服务器上只有默认dbo架构. 解决: 以windows身份验证登录,附加正常. 错误码可能为5120. ...

  4. Linux系统默认服务建议开启关闭说明列表

    服务名称 功能简介 建议 acpid 电源管理接口.如果是笔记本用户建议开启,可以监听内核层的相关电源事件. 开启 anacron 系统的定时任务程序.cron的一个子系统,如果定时任务错过了执行时间 ...

  5. memwatch

    一.简介 memwatch可以跟踪程序中的内存泄漏和错误,能检测双重释放(double-free).错误释放(erroneous free).没有释放的内存(unfreed memory).溢出(Ov ...

  6. *.hbm.xml讲解

    <!-- package声明pojo类所在的包,如果不写 那么在class中需要指明pojo类所在的包 schema指数据库模式 一个模式下可以有多张表 --> <hibernate ...

  7. You need to use a Theme.AppCompat theme

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dji.sdk.sample/com.dji.sdk.sa ...

  8. Linux设置服务自启动(转载)

    From:http://www.cnblogs.com/nerxious/archive/2013/01/18/2866548.html 有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统 ...

  9. Undefined symbols for architecture x86_64 解决之道

    目前临时的解决办法是 1.把1.选中Targets—>Build Settings—>Architectures. 把build active architectures only 改为 ...

  10. Move Zeroes

    https://leetcode.com/problems/move-zeroes/ Given an array nums, write a function to move all 0's to ...