vs 跨平台附加linux 调试程序调用动态库不能触发断点

附加调试动态库不能触发断点:

最近我负责开发一个动态库中间件,供其他同事调用,结果联调时发现bug想附加到同事程序中进行调试,结果无论我怎么更改调试设置也不行,始终提示当前不会命中断点。

在这里插入图片描述
所以我网上各种各种搜索一通,并且使用了 文心一言,盘古 ,混元,通义 等一众ai ,得到的 结果大同小异 ,我按上面的方法一次排查

  • 确保动态库的代码版本与调试符号匹配‌
    ‌现象‌:代码修改后未重新编译,或编译后未部署到正确路径。
    ‌解决方案‌:
    清理并重新编译动态库和主程序。
    确认动态库(DLL)和 PDB 文件已复制到主程序的生成目录(如 Debug 或 Release 文件夹)。
  • 检查断点位置是否有效‌
    ‌现象‌:断点设置在未执行的代码行(如未调用的函数、优化后的代码)。
    ‌解决方案‌:
    确保断点所在的代码会被实际执行(例如在动态库的导出函数中设置断点)。
    禁用代码优化:在动态库项目属性中,设置 ‌C/C++ → 优化 → 优化‌ 为 禁用 (/Od)。
  • 确保附加到正确的进程‌
    ‌现象‌:附加到了错误的进程,或动态库未被加载。
    ‌解决方案‌:
    启动主程序,然后在 VS 中选择 ‌调试 → 附加到进程‌(Ctrl+Alt+P),选择主程序进程。
    附加后,打开 ‌调试 → 窗口 → 模块‌,检查动态库是否已加载
  • 检查调试器设置‌
    ‌现象‌:调试器未配置为调试本机代码或动态库。
    ‌解决方案‌:
    右键主程序项目 → ‌属性 → 调试‌,确保 ‌调试器类型‌ 设置为 仅限本机 或 混合(如果涉及托管代码)。
    在 ‌调试 → 选项‌ 中,启用 ‌启用地址级调试‌ 和 ‌启用源服务器支持‌。
  • 检查动态库的加载路径‌
    ‌现象‌:动态库未从预期路径加载,导致调试符号不匹配。
    ‌解决方案‌:
    使用工具(如 ‌Process Explorer‌)检查主程序加载的动态库路径:
    确认加载的是最新编译的 DLL。
    如果路径不对,将 DLL 和 PDB 文件复制到主程序的工作目录。
  • 以管理员权限运行 Visual Studio‌
    ‌现象‌:权限不足导致调试器无法附加到进程。
    ‌解决方案‌:
    右键 VS 快捷方式 → ‌以管理员身份运行‌
  • 其他高级操作‌
    ‌手动绑定符号‌:
    在 ‌模块窗口‌ 中右键动态库 → ‌加载符号‌,手动指定 PDB 文件。
    ‌调试输出诊断‌:
    在 ‌输出窗口‌(调试类别)中检查是否有 未加载符号 或 符号已加载 的提示。

在经过上面一众方法排查后还是没有解决 ,我一步步观察附加后的日志 发现只要是我们自定义的动态库引用路径都没有成功加载符号
在这里插在这里插入图片描述
入图片描述
在这里插入图片描述

所以我将自定义引用路径下的动态库 放到 /lib64下后果然能成功附加并触发断点,

在这里插入图片描述
在这里插入图片描述
有了思路之后我又在网上一通搜索 查找怎么在运行时指定动态库加载符号路径 ,但尝试几种方式后似乎没什么效果,加上赶项目 所以也就没时间细究 先将相对路径下动态库 移到/lib64下凑合使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值