VS2003 Debug Dll

问题描述:
1.A.dll调试命令中填的B.exe,A工程中F5,此时B.exe运行启动,客户端运行连接B,此时,会重新启动一个B.exe
2.直接在B工程中F5,此时此时B.exe运行启动,客户端运行连接B,则不会重新启动一个B.exe
出现现象1,所以导致我不能debug进入到A.dll工程中单步调试。。。
...全文
271 31 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-01-07
  • 打赏
  • 举报
回复
引用 30 楼 nanfeiyannan 的回复:
这样,确实可以跟踪到想跟踪的代码了。。。
个人意见:能被本ID手把手教是楼主的荣幸!
  • 打赏
  • 举报
回复
这样,确实可以跟踪到想跟踪的代码了。。。
  • 打赏
  • 举报
回复
学习了,谢谢赵老师。。。
赵4老师 2015-01-06
  • 打赏
  • 举报
回复
引用 18 楼 nanfeiyannan 的回复:
F5与直接运行程序的区别,当前路径目录不同,一个Debug的区别:

        char* path=new char[100];

	ZeroMemory(path,100);

	GetCurrentDirectoryA(100,path);

	CString strpath;
	strpath.Format("%s",path);

	AfxMessageBox(strpath);
你不会设置F5时使用你指定的目录吗? 项目、属性、配置属性、调试、工作目录:……
  • 打赏
  • 举报
回复
F5与直接运行程序的区别,当前路径目录不同,一个Debug的区别:

        char* path=new char[100];

	ZeroMemory(path,100);

	GetCurrentDirectoryA(100,path);

	CString strpath;
	strpath.Format("%s",path);

	AfxMessageBox(strpath);
赵4老师 2015-01-06
  • 打赏
  • 举报
回复
②进入VS IDE 文件、关闭解决方案。 工具、附加到进程、可用进程、里面选你要调试的进程B.exe、点“附加”按钮、再点“全部中断”按钮、再按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂且光标落在你的dll源代码中为止。 BTW:我本来就不指望楼主是个PPMM。
赵4老师 2015-01-06
  • 打赏
  • 举报
回复
②进入VS IDE 文件、关闭解决方案。 工具、附加到进程、可用进程、里面选你要调试的进程B.exe、点“附加”按钮、再点“全部中断”按钮、……
赵4老师 2015-01-06
  • 打赏
  • 举报
回复
引用 25 楼 nanfeiyannan 的回复:
[quote=引用 23 楼 zhao4zhong1 的回复:] 你问这个问题的根本原因是你不会用VS IDE在已经运行的进程中选择一个attach即附加后再调试它。 ①直接运行B.exe,客户端连接。 ②进入VS IDE 文件、关闭解决方案。 工具、附加到进程、可用进程、里面选你要调试的进程B.exe、点“附加”按钮……
嗯,这个还是没搞懂。。。[/quote] 都说到这份上了,还不去动手试试。楼主如果是PPMM的话,本ID免费开房手把手教你。
  • 打赏
  • 举报
回复
引用 23 楼 zhao4zhong1 的回复:
你问这个问题的根本原因是你不会用VS IDE在已经运行的进程中选择一个attach即附加后再调试它。 ①直接运行B.exe,客户端连接。 ②进入VS IDE 文件、关闭解决方案。 工具、附加到进程、可用进程、里面选你要调试的进程B.exe、点“附加”按钮……
嗯,这个还是没搞懂。。。
  • 打赏
  • 举报
回复
引用 22 楼 u011014707 的回复:
你可以在B.exe中设置一个互斥量,保证电脑上只能运行一个B.exe。这样试试看怎样。如果这样客户端无法调用到B.exe,那就看客户端的代码在调用的时候是怎样实现的。
之前这样试了,此时,客户端重新开启的那个进程会起不来。
赵4老师 2015-01-06
  • 打赏
  • 举报
回复
你问这个问题的根本原因是你不会用VS IDE在已经运行的进程中选择一个attach即附加后再调试它。 ①直接运行B.exe,客户端连接。 ②进入VS IDE 文件、关闭解决方案。 工具、附加到进程、可用进程、里面选你要调试的进程B.exe、点“附加”按钮……
12304108 2015-01-06
  • 打赏
  • 举报
回复
你可以在B.exe中设置一个互斥量,保证电脑上只能运行一个B.exe。这样试试看怎样。如果这样客户端无法调用到B.exe,那就看客户端的代码在调用的时候是怎样实现的。
  • 打赏
  • 举报
回复
引用 19 楼 zhao4zhong1 的回复:
[quote=引用 18 楼 nanfeiyannan 的回复:] F5与直接运行程序的区别,当前路径目录不同,一个Debug的区别:

        char* path=new char[100];

	ZeroMemory(path,100);

	GetCurrentDirectoryA(100,path);

	CString strpath;
	strpath.Format("%s",path);

	AfxMessageBox(strpath);
你不会设置F5时使用你指定的目录吗? 项目、属性、配置属性、调试、工作目录:……[/quote] 确实弹出对话框,显示目录一样了。可是,现象还是依旧: 直接运行,客户端连接,则不会重新运行进程。F5运行的,客户端第一次连接,则会重新运行一个B.exe的进程。
  • 打赏
  • 举报
回复
引用 19 楼 zhao4zhong1 的回复:
[quote=引用 18 楼 nanfeiyannan 的回复:] F5与直接运行程序的区别,当前路径目录不同,一个Debug的区别:

        char* path=new char[100];

	ZeroMemory(path,100);

	GetCurrentDirectoryA(100,path);

	CString strpath;
	strpath.Format("%s",path);

	AfxMessageBox(strpath);
你不会设置F5时使用你指定的目录吗? 项目、属性、配置属性、调试、工作目录:……[/quote] 学习了。。。
赵4老师 2015-01-05
  • 打赏
  • 举报
回复
MSDN里面有讲如何调试dll的,楼主自己亲自去查阅吧。
robertbo 2015-01-05
  • 打赏
  • 举报
回复
看问题描述了,我的工程这样的方法就可以进入的dll调试,只要保证编译的都是最新的就可以,不知道不能运行的话会是哪块环境出的问题,我是VS2012。实在不行的话就用日志吧,把出错信息和想要的信息打印出来。
  • 打赏
  • 举报
回复
引用 9 楼 robertbo 的回复:
exe跟dll在同一个目录吗,如果不在需要把编译的最新的dll放到exe执行目录,再F5运行exe程序,在这之间不能在修改代码了,否则设置的断点就失效了
在同一个目录,请仔细看一下问题描述哈,呵呵。 问题: 1.直接运行exe,则客户端连接,不会重新运行B.exe 2.F5的话,客户端连接,会重新运行一个进程,B.exe
robertbo 2015-01-05
  • 打赏
  • 举报
回复
exe跟dll在同一个目录吗,如果不在需要把编译的最新的dll放到exe执行目录,再F5运行exe程序,在这之间不能在修改代码了,否则设置的断点就失效了
  • 打赏
  • 举报
回复
引用 7 楼 Saleayas 的回复:
那你的客户端是什么东东??
opcclient
Saleayas 2015-01-05
  • 打赏
  • 举报
回复
那你的客户端是什么东东??
加载更多回复(11)

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧