VS2005 + CAA RADE 断点无法命中完整排查
VS2005 + CAA RADE 断点无法命中完整排查(CAA是DLL插件,不是EXE,这点最关键)
CAA调试不是F5直接启动,一般是:启动CATIA → VS附加到
CNEXT.exe进程,很多人卡在这一步。断点灰色提示:The breakpoint will not currently be hit。
一、工程编译配置(必须Debug,禁用优化)
打开CAA Module项目属性(Alt+F7)
- C/C++ → 常规
- 调试信息格式:
用于编辑并继续的程序数据库(/ZI),不能选禁用
- 调试信息格式:
- C/C++ → 优化
- 优化:禁用(/Od) ✅ 【最常见坑:开优化会直接把代码行删掉,断点失效】
- 链接器 → 调试
- 生成调试信息:是(/DEBUG)
- 生成程序数据库文件:保留pdb输出路径
- 解决方案配置:Debug,不要Release
- 路径:源码、工作区路径不要中文、空格,CAA RADE对中文路径兼容性极差
清理旧文件:删除所有
ncb、obj、pdb、dll,Clean→Rebuild All
二、VS调试器全局选项(VS2005工具→选项→调试→常规)
- 取消勾选:要求源文件与原始版本完全匹配(必勾掉,CAA源码/二进制容易版本错位)
- 取消勾选:启用仅我的代码(Just My Code)
- 符号设置:工具→选项→调试→符号,添加你CAA模块输出pdb所在目录;缓存目录可自定义。
三、CAA特有:DLL部署与符号加载(重中之重)
CAA编译输出dll,会放到CAA Workspace的code\bin目录,CATIA启动时加载这个dll。
- 确认最新编译的dll+pdb已经拷贝到Workspace的
code/bin,旧dll会覆盖新代码,断点不命中。 - 调试操作步骤(标准CAA调试流程)
- 先手动启动CATIA(CNEXT.exe)
- VS菜单:调试 → 附加到进程,找到
CNEXT.exe - 【附加到】代码类型:点选择,只勾选本机代码(Native),不要托管代码!
- 附加成功后,打开你的CAA源码打红色断点。
- 查看模块窗口:调试→窗口→模块
- 在列表找到你的CAA dll,右键 → 符号加载信息
- 如果提示:找不到pdb,说明pdb路径不对、pdb/dll版本不一致;
- 如果显示:已加载符号,断点红点正常;没加载符号,断点灰色。
坑:CATIA启动时加载DLL,如果附加VS之前插件代码已经执行,构造函数、工作册初始化代码断点会跑不到,这种情况:
方法A:代码里加__debugbreak();,CATIA运行到这行自动中断进VS;
方法B:先附加VS,再在CATIA里点击你的命令/工作台,触发代码执行。
四、其他高频CAA踩坑点
- 代码被inline内联:优化关闭后依然可能内联;把目标函数加
__declspec(noinline)测试,或者断点不要打在空行、注释、宏展开行。 - CAA MAB/RADE mkmk编译:如果你用mkmk命令行编译,必须带上Debug参数,mkmk默认有时会带优化,VS工程属性不生效。
- 断点打在命令对象的构造函数:CATIA启动一次性加载,附加VS的时候代码早就跑完了,断点不会触发,要在命令
CATCmd::Activate()里面打断点。 - 权限:VS2005、CATIA全部以管理员身份运行,否则无法附加进程、读取DLL符号。
- 多模块:确认你当前打开的源码文件,就是编译这个dll对应的源文件,源码版本不一致会断点灰色。
快速自检清单(按顺序)
- ✅ 工程Debug,优化/Od关闭,生成ZI+DEBUG
- ✅ 清理全部中间文件,Rebuild All
- ✅ 最新dll+pdb部署到Workspace code/bin
- ✅ 启动CATIA后,VS附加CNEXT.exe,附加类型为本机代码
- ✅ VS调试选项:关闭“要求源码匹配”、关闭仅我的代码
- ✅ 模块窗口确认CAA DLL已经加载符号
- ✅ 断点位置:放在可执行代码行,不要宏、空行、内联函数
应急测试
在你要调试的函数第一行插入:
__debugbreak();
编译后,CATIA执行到这行,会直接弹出调试器选择窗口,选择VS2005附加,强制断住,用来判断是符号问题还是代码根本没有执行到。
如果你愿意,告诉我:断点是灰色空心圆(提示the breakpoint will not currently be hit)还是红色实心但是跑不到,我可以直接定位是符号问题还是代码执行时序问题。
浙公网安备 33010602011771号