首页 > 编程语言 >关于调试gmsh源码过程中产生的gmsh.dll和gmsh.pdb文件无法匹配,进而导致无法载入pdb文件的问题的形成和解决.

关于调试gmsh源码过程中产生的gmsh.dll和gmsh.pdb文件无法匹配,进而导致无法载入pdb文件的问题的形成和解决.

时间:2023-07-05 18:04:13浏览次数:47  
标签:文件 匹配 dll pdb gmsh 调试

省流版

由于ALL_BUILD会将对应于gmsh.exe的调试文件gmsh.pdb附在对应于gmsh.dll的调试文件gmsh.pdb文件,进而导致gmsh.pdb无法和gmsh.dll文件进行版本匹配,进而导致无法载入,进而导致无法调试gmsh源码;

解决办法: 将对应于gmsh.exe的gmsh.pdb改为其他任意命名即可;或者仅仅生成gmsh-shared项目;

  • 前者可以使得生成的pdb文件存在两份,分别对应gmsh.dll和gmsh.exe文件;
  • 后者可以使得仅仅生成对应于gmsh.dll的pdb文件

原因分析和解决

  1. 软件配置
    gmsh-4.11+vs2015+cmake-3.20+OCC770;

  2. 调试gmsh源码的时候出现以下错误;
    image
    且将本地生成的pdb文件路径写入到符号路径依然无法导入.
    image

  3. 所以问题就是:为什么pdb文件和dll文件之间无法匹配上?

    1. 经过google,发现使用symchk可以验证dll和pdb文件是否能够匹配.
    2. 经过测试发现,两者确实无法匹配.
      image
    3. 所以我本来以为是两者版本不匹配导致上述问题的发生,进而使用pdb版本修改文件,使其能够版本匹配;但pdb文件依然无法导入,所以这个方法不靠谱;
    4. 另一个证据是:我所生成的occ-pdb文件和dll文件使用symchk匹配发现依然无法匹配,但是却可以被vs2015导入;(可能这就是vs的魅力)
  4. 观察输出发现:
    image
    使用ALL_BUILD生成了两次pdb文件;

    1. 所以自然的想到,仅仅生成shared项目,然后使用其生成的pdb文件,发现可以使用了;
      image
      image
    2. 进而可以想到:
      ALL_BUILD会将对应于gmsh.exe的调试文件gmsh.pdb附在对应于gmsh.dll的调试文件gmsh.pdb文件
      同时,可以观察到,通过shared生成的pdb文件为168180kb;通过all-build生成的pdb文件为168332kb;
    3. 因此可以猜测是all-build这步操作出现的问题;
      深入all-build.vcxproj发现,其将pdb输出路径重定向到之前生成pdb文件上,进而导致上述问题的产生;
    4. 解决的思路:
      修改生成路径;或者修改vcxproj配置文件;
  5. 总结

    1. 以后遇到pdb无法导入的问题,可以考虑是否是因为dll和pdb版本不匹配,而不匹配的最显著的表现就是:pdbexplore上是否能够正确的显示符号名称;
    2. 调试问题的时候,不能急躁;一步一步的将正确的地方排除,最后定位到可能的BUG所在;
    3. 这个BUG更多的是一种经验上的增长;并没有带来太多的知识上的提升,这是一个非常低级的BUG;
    4. 从方法论的角度来看:很多问题需要的不仅仅是谷歌,而是沉下心来认真的阅读日志文件,并逐步解决问题;

标签:文件,匹配,dll,pdb,gmsh,调试
From: https://www.cnblogs.com/bkct-tech-blog/p/17529049.html

相关文章

  • springboot 加载自定义的属性配置文件 或者xml文件
    1、properties user.propertiesname=zhangshanage=18  2、xml Pen1.xml<?xmlversion="1.0"encoding="utf-8"?><!DOCTYPEpropertiesSYSTEM"http://java.sun.com/dtd/properties.dtd"><properties><......
  • Linux 虚拟文件系统四大对象:超级块、inode、dentry、file之间关系
    转载:Linux虚拟文件系统四大对象:超级块、inode、dentry、file之间关系-一口Linux-博客园(cnblogs.com)一:文件系统1.什么是文件系统?操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。通常文件系统是用于存储和组织文件的一种机制,便于对文件进行......
  • golang 解析yaml文件
    初始化packagemainimport( "github.com/spf13/viper")funcinitConfig(){ viper.SetConfigName("config") viper.AddConfigPath("./") iferr:=viper.ReadInConfig();err!=nil{ fmt.Println("Initsetingerror:",......
  • kettle9.3双击Spoon.bat文件闪退
    在这里记录一下出现闪退的原因,可能有很多种,我这只是其中一种出现闪退的时候,在kettle启动目录中找到SpoonDeBug.bat,双击运行,根据提示一直按Y,最后完成后会在当前目录下生成一个SpoonDeBug.txt文件,里面记载的是报错信息,报错信息如下:DEBUG:UsingJAVA_HOMEDEBUG:_PENTAHO_JAVA_H......
  • 前端文件流下载--mockjs污染全局问题
    参考文章https://blog.csdn.net/daotian2016/article/details/123670179 项目场景:项目场景:VUE工程,做了一个代码自动生成可以导出zip的功能。问题描述导出的zip文件打开提示“不可预料的压缩文件末端”,文件打不开。 exportfunctiondownLoadZip(str,filename){ varurl=......
  • cellos.20221115_030623类似的目录撑爆存储节点的root文件系统
    1、某Exadata客户,其中一个存储节点的根文件系统使用率超过90%,使用如下命令检查是哪些目录占用空间#du-sm*|sort-rn|head发现是/var/log目录下的东西占用大量空间。2、在/var/log目录下,存在大量cellos开头,但以日期结果的目录,这些目录占用大量磁盘空间。如下所示:drwxr-----7......
  • 在linux开发板上加载.ko驱动文件时,出现“insmod: ERROR: could not insert module led
    本文档仅用于本人在学习过程中的记录,方便日后查找问题。问题描述:在ubuntu虚拟机编译出的xxx.ko文件,发送到linux开发板上,执行insmodxxx.ko时,出现“insmod:ERROR:couldnotinsertmoduleled.ko:Invalidmoduleformat”错误。原因查找:1)在linux开发板上,使用uname-r查看lin......
  • 探究Visual Studio生成的.vs文件夹内部结构和作用
    https://shiyousan.com/post/636441130259624698.vs目录是用来存储当前用户在解决方案中的工作配置,具体包括VS关闭前最后的窗口布局、最后打开的选项卡/操作记录/文件文档、某些自定义配置/开发环境、调试断点等这类设置信息和状态。这样每当用户关闭解决方案后再重新打开,就能继......
  • 2. 配置文件
    1.配置文件格式我们现在启动服务器默认的端口号是8080​,访问路径可以书写为http://localhost:8080/books/1在线上环境我们还是希望将端口号改为80​,这样在访问的时候就可以不写端口号了,如下http://localhost/books/1而SpringBoot​程序如何修改呢?SpringBoot​提供了......
  • Java批量操作Excel文件实践
    摘要:本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。前言|问题背景在操作Excel的场景中,通常会有一些针对Excel的批量操作,批量的意思一般有两种:对批量的Excel文件进行操作。如导入多个Excel......