Open Cascade作为世界上唯一一款成熟的开源CAD几何内核,无论是商业开发还是供广大CAD开发人员学习,都能发挥重要的作用。

由于Open Cascade的核心源码全部开放,开发人员在调试基于OCC编写的程序时,可以进入内部源码进行调试,方便找到Bug的原因,也可以辅助学习一些CAD核心几何算法原理。

但是如果直接采用官方提供的OCC库,调试代码时按F11是无法进入Open Cascade内部源码的,原因是OCC官方发布的dll文件目录(OpenCASCADE-7.6.0-vc14-64\opencascade-7.6.0\win64\vc14\bin)里只有dll文件,缺少pdb文件。

图1 OCC官方自带的dll文件目录

pdb文件是VS编译链接时生成的文件,里面存储了VS调试程序时所需要的基本信息,主要包括源文件名、变量名、函数名、FPO(帧指针)、对应的行号等,如果有这些文件的话,就可以进入Open Cascade内部进行调试。

所以要想进入OpenCascade内部源码进行调试,必须用相应的编译器(比如VS2015)手动编译Open Cascade源码,然后运行时调用编译出来的dll文件即可。

以VS2015+Open Cascade7.6.0为例,具体步骤为:

  1. 安装opencascade-7.6.0-vc14-64.exe,然后双击安装目录下的C:\XXX\OpenCASCADE-7.6.0-vc14-64\opencascade-7.6.0\msvc.bat,直接打开OCCT项目;
  2. 设置编译选项为x64 Debug(只有在Debug模式下才会生成pdb文件),编译整个OCCT项目,编译顺序为:FoundationClass、ModelingData、ModelingAlgorithms,然后再编译剩余的模块;
  3. 编译结束后,会在OpenCASCADE-7.6.0-vc14-64\opencascade-7.6.0\win64\vc14\bind目录下生成所需的dll文件和pdb文件。
  4. 将头文件目录、链接文件目录添加到VS工程中。头文件目录示例:C:\XXX\OpenCASCADE-7.6.0-vc14-64\opencascade-7.6.0\win64\vc14\inc。链接文件目录示例:C:\XXX\OpenCASCADE-7.6.0-vc14-64\opencascade-7.6.0\win64\vc14\lib
  5. 将生成的dll文件目录加入到环境变量Path中或者copy编译生成的所有dll文件和pdb文件到VS工程中的编译结果目录。
  6. 再次打开项目进行调试,按F11即可进入Open Cascade内部。

图2 手动编译生成的dll文件目录

更新:上面第2步,现在不建议在Debug模式下编译,因为只要设置一下,Release模式下也是可以编译生成出pdb文件的,由于实测Release模式下编译的OCC速度更快,建议采用Release模式进行编译,具体设置方法如下:

OCCT项目右键——属性——配置属性——链接器——调试——生成调试信息——否改为Debug。然后再编译生成OCC。

如何到Open Cascade内部进行调试相关推荐

  1. 痞子衡嵌入式:IAR内部C-SPY调试组件配套宏文件(.mac)用法介绍

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR内部C-SPY调试组件配套宏文件(.mac)用法. 痞子衡之前写过一篇 <JLink Script文件基础及其在IAR下调用 ...

  2. CoreCLR源码探索(五) GC内存收集器的内部实现 调试篇

    在上一篇中我分析了CoreCLR中GC的内部处理, 在这一篇我将使用LLDB实际跟踪CoreCLR中GC,关于如何使用LLDB调试CoreCLR的介绍可以看: 微软官方的文档,地址 我在第3篇中的介绍 ...

  3. 软件调试学习笔记(七)—— 单步步入单步步过

    软件调试学习笔记(七)-- 单步步入&单步步过 单步步入 设置单步异常 处理单步异常 实验1:单步异常的设置与处理 单步步过 实现思路 实验2:实现单步步过 单步步入 描述: 单步步入的实现依 ...

  4. 初级教程之---delphi调试

    一.准备调试  Delphi 在 IDE 内部集成了一个调试器,因而对程序的调试不用离开集成开发环境(IDE)就可以进行.该调试器能够控制程序的运行.监视程序的输出.检查和修改变量的值. 在调试程序之 ...

  5. 实战能力|一文看懂GDB调试上层实现

    一.前言 这篇文章来聊聊大名鼎鼎的GDB,它的豪门背景咱就不提了,和它的兄弟GCC一样是含着金钥匙出生的,在GNU的家族中的地位不可撼动.相信每位嵌入式开发工程师都使用过gdb来调试程序,如果你说没有 ...

  6. nodejs里require的调试截屏

    例子:我执行到了下图第二行: const TCPClient = require('-/modules/tcpClient/index') 那么我们就进入require的内部进行调试: 进入第11行: ...

  7. scala本地调试_如何编写自己的Java / Scala调试器

    scala本地调试 在本文中,我们将探讨Java / Scala调试器的编写和工作方式. 诸如Windows的WinDbg或Linux / Unix的gdb之类的本机调试器通过操作系统直接提供给它们的 ...

  8. jvm调试工具_调试JVM

    jvm调试工具 在某些(极少数)情况下,您可能会遇到使JVM本身崩溃的情况. 我最近通过将ThreadGroup的名称设置为null来进行管理 . 在这些情况下,调试JVM本身很有用,这样可以更精确地 ...

  9. powermock模拟对象_使用PowerMock测试对象的内部状态

    powermock模拟对象 大多数单元测试都集中于测试对象的行为以证明其有效. 这可以通过编写一个JUnit测试来实现,该测试调用对象的公共方法,然后测试这些调用的返回值是否与先前定义的一组期望值匹配 ...

最新文章

  1. 四连问:API 接口应该如何设计?如何保证安全?如何签名?如何防重?
  2. 6 个理由,让我不顾一切撑腰 Python!
  3. 阿里P8架构师谈:什么是缓存雪崩?服务器雪崩的场景与解决方案
  4. java previous_java – 在枚举类型上实现`next`和`previous`的最好方法是什么?
  5. C/C++传递二维数组[转载]
  6. mysql 多个网卡_seriver -- 多个网卡只能认到一个网卡的解决方法
  7. SOA平台之争:Java EE,还是.NET……
  8. 趣图:嫁人就嫁程序员,大妈都懂的!
  9. Java-集合第四篇Queue集合
  10. 把14亿中国人都拉到一个微信群在技术上能实现吗?
  11. 鸿蒙系统PC具体配置要求,原神pc电脑配置多少 原神游戏最低配置一览
  12. 高德地图 地图点击获取经纬度,经纬度格式判断
  13. war3鸿蒙大陆攻略,【魔兽rpg地图失落大陆攻略汇总】
  14. 如何训练神经网络的参数?,神经网络的参数计算
  15. 蘑菇街iOS客户端应用源码
  16. C++常见的预定义宏
  17. 热设计功耗(TDP)与功耗(P)
  18. vue项目引入高德地图
  19. 安装C3D v1.0提取视频特征
  20. CodeForces - 777D Cloud of Hashtags

热门文章

  1. sweetalert 显示html,SweetAlert 弹窗插件入门教程
  2. 医疗金融法律大模型:从ChatDoctor到BloombergGPT/FinGPT/FinBERT、ChatLaw/LawGPT_zh
  3. Android 时间格式 年月日时分秒毫秒
  4. java 定时任务插件_详解Spring整合Quartz实现动态定时任务
  5. C++算法Day1之有趣的跳跃
  6. 是什么,夺走了我的时间?(2021年1月总结)
  7. 应用软件和操作系统的本质区别
  8. imagemagick整理
  9. 详谈Linux系统《高端内存和低端内存》
  10. linux 辅助ip地址到文本,技术|如何在 Ubuntu 系统中添加一个辅助 IP 地址