下载最牛 2014-02-19 02:57 采纳率: 0%
浏览 866

visual studio 2010 附加进程调试 处问题

无法命中断点 怎么办 进程附加完毕 就是无法命中 之前还好使呢 什么情况

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-20 19:30
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 这篇文章:详细叙述 visual studio 2010 如何新建项目,编写第一个程序 也许有你想要的答案,你可以看看
    • 除此之外, 这篇博客: Visual Studio调试方式详解中的 4、附加到进程调试 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

             如果我们不想在最上层的exe模块进行整体的Release调试,可以只调试某一个模块,只需要在Release下编译一个模块。或者是问题出在底层的模块中,比如组件组的模块、协议组的模块、网络组的模块、音视频编解码组的模块或者是开源组件的模块等,这些组的开发维护人员只需要使用附加调试的方式去调试他们负责的模块。

             只需要在机器上安装exe安装包(release版本),他们本地用VS编译一下Release版本的库,将库拷贝到exe程序所在的路径中,然后将exe程序启动起来,这样exe程序使用的就是刚才编译出来的库了。接着在打开库源码的VS中,点击菜单栏中的调试->附加到进程,在弹出的窗口中找到exe进程:

      b057d5941ca0494e80c5198d15b00de6.png

      点击附加按钮即可,就可以打断点调试了。

             有人可能会问将dll库拷贝到exe路径中,为啥附加调试时可以调试该dll库的源码呢?其实之所以能调试,是因为编译时生成的调试信息都保存到pdb文件中了,编译生成dll时会将本地编译生成的pdb文件的完整路径写到对应的二进制文件中,如下所示:(二进制文件以文本的方式打开会出现乱码,不妨碍查看对应的pdb文件的路径)

      e7fe0f99745e4821b08ee1365c24131c.png

      对于我们的测试程序TestDlg.exe,我们使用Notepad++打开,以.pdb关键字搜索,就能搜到写入到TestDlg.exe二进制文件中的pdb完整路径: 

      C:\Users\Administrator\Desktop\TestDlg\Release\TestDlg.pdb,如上所示。

      所以,将编译好的dll文件拷贝到exe路径中,VS根据dll库中写入的pdb文件的路径可以找到pdb文件,可以找到调试信息,所以可以在VS中调试源码。

             对于附加调试,需要exe程序先启动起来,然后将VS附加到exe进程上调试。但如果问题出现在dll库初始化阶段,程序启动时就会去初始化底层的dll库,如果等程序启动完成后再去附加,时间上可能就晚了,dll库初始化的代码已经跑过了。

             这种场景下我们有办法,可以在exe程序main函数的入口处调用API函数MessageBox弹出一个模态框,将代码阻塞住,给附加进程创造一个时机。等进程附加上去后,再点击MessageBox的确定按钮,让exe继续往下跑,调用dll库的初始化接口,这样就能调试到dll库的初始化代码了。这是一个技巧。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条