c语言项目联调,VS下调试多个C项目联调

Dll和Exe协调:

dll项目往往会附带生成一个对应的lib,是dll导出函数和符号链接信息。同lib项目生成的lib有点不同,这里只有原型信息,实体代码在dll中。dll是可实际运行的二进制代码,其中有定位代码。

新建解决方案D:\DllDemo\DllDemo(.dsw,.sln),在其下新建动态库(Win32 Dynamic-Link Library)项目MyDll(.dsp,.vcproj)和动态库测试项目(Win32 Console Application)MyDllDemo(.dsp,.vcproj)。

同Lib和Exe协调一样,首先需要为Exe项目附加头文件(.h)包含和链接库(.lib)包含。

(1)若设置MyDllDemo为启动项目,为了使MyDll.dll对调试exe可见,设置MyDllDemo的调试工作目录(Working directory)为..\MyDll\Debug。

执行F5调试命令,则在MyDll和MyDllDemo中的断点处都会暂停。在MyDllDemo中可F11进入MyDll中的函数定义处。

(2)若设置MyDll为启动项目,则要配置外部exe调用程序:

VC6中,“Project Setting àDebug(Category:General)”中的“Executable for debug session”处填写exe路径,例如:D:\DllDemo\MyDllDemo\Debug\MyDllDemo.exe。相应VC2005中,“项目属性à配置属性à调试à命令”处填写exe路径。

为了使MyDll.dll对调试exe可见,设置调试工作目录(Working directory)为.\Debug。

执行F5调试命令,则在MyDll和MyDllDemo中的断点处都会暂停。效果同(1)。

对于不同解决方案(.dsw,.sln)下的Dll项目和Exe项目协同调试方法同上。

在(1)和(2)中,除了指定调试工作目录外,还可以处理生成后事件,将生成的链接库文件直接复制到应用程序Debug目录下。具体的,在VC6中“Project Setting àPost-built step”或VC2005中“项目属性à配置属性à生成事件à生成后事件”输入生成后处理命令:copy .\Debug\MyDll.dll ..\MyDllDemo\Debug\MyDll.dll。当然,还可以将MyLib(MyDll)的输出目录直接指向MyLibDemo(MyDllDemo)的Debug下。

四.VC调试小结

我们在VC2005中printf函数调用处设置断点,F11 将打开printf函数的源码文件C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\printf.c进入printf函数内部,实际上“工具à选项à项目和解决方案àVC++目录à源文件”中包含了crt源代码的路径:$(VCInstallDir)crt\src。

而在VC6中,C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC不存在,故试图F11进入printf内部时,将弹出“Find Source”对话框,提示“Please enter the path for PRINTF.C”文件。

调试VC时,编译器之所以能够跟踪进入C库函数,是因为编译器本身附带提供了Debug版本的CRT库。

VC6中的MSVCRTD.DLL-MSVCRTD.LIB-MSVCRTD.PDB(对应VC2005中msvcr80d.dll-msvcrtd.lib)为C Runtime Library的Debug版本,其中包含了C运行库的调试信息。

VC6中的MSVCP60D.DLL-MSVCPRTD.LIB-MSVCP60D.PDB(对应VC2005中msvcp80d.dll - msvcprtd.lib)为C++ Runtime Library的Debug版本,其中包含了C++运行库的调试信息。

鉴于Debug版本对调试信息的记录和DllàLib(*.obj,*.lib)àSrc(*.c,*.cpp)的对应关系,在VC中我们就可以设置断点跟踪调试代码。

33/3<123

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值