调试带有源代码的DLL文件

工作环境:dll源代码是c,在Visual studio 2010中调试。

第一步,调试的准备。

用C#语言编写一个测试dll文件的程序,由于dll源程序是c的,且运行结果是黑屏的,所以C#代码也是运行在黑屏的console环境下。完整代码如下。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace TestMelp
{
    class Program
    {
        [DllImport(@"D:\Visual Studio Projects\FileMelp\Debug\FileMelp.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        extern static void cmd_melp(int argc, string[] argv);
        static void Main(string[] args)
        {
            //string cmd = "melp -s -i D:/bin/bit -o D:/bin/output";
            string cmd = "melp -a -i D:/bin/inputD -o D:/bin/bitRight";
            string[] argv = cmd.Split(new char[] { ‘ ‘ });
            int argc = argv.Length;
            cmd_melp(argc, argv);
        }
    }
}

  由于调试的FileMelp.dll文件和本程序不在同一个文件夹下,容易出现文件地址问题,所以本测试程序的文件均采用绝对地址。另外cmd的格式要求不能有两个连续的空格,也可以通过使用Trim函数,解决这个问题。

第二步,定位到自己改写的带有源代码的dll工程。

本文的FileMelp.dll工程,是通过本空间的生成VS dll那篇博客生成的,具体实现方法不在赘述。下面的两段代码分别添加到FileMelp工程melp.h和melp.c文件最下面。

#ifndef LIB_H
#define LIB_H
extern _declspec(dllexport) void cmd_melp(int argc, char **argv);
/* 加入任意你想加入的函数定义*/
#endif

void cmd_melp(int argc, char **argv)
{
    main(argc,argv);
}

  按F6,上述步骤实现FileMelp.dll动态库的生成。

第三步,添加测试程序到dll源代码处。

在FileMelp工程里面,右击FileMelp工程,选择属性。

或者按Alt+Enter,弹出如下界面。

在Configuration Properties\Debugging\Command选择第一步生成的测试.exe文件。这样完成了调试前的准备。接下来,在需要调试的代码地方,添加断点。即可。

注意:

要在Debug的模式下编译生成测试程序的exe文件,也就是说Configuration Properties\Debugging\Command这个路径要填测试程序的Debug目录。同时,DLL程序在加断点运行的时候也要在Debug的模式下,否则断点就会失效。

原文转载地址:

http://my.oschina.net/bubifengyun/blog/111924

http://my.oschina.net/bubifengyun/blog/96252

时间: 2024-10-14 03:17:20

调试带有源代码的DLL文件的相关文章

如何使一个你没有源代码的DLL文件变为强命名的DLL

转载: 有时候你会需要一个DLL是强命名的,比如你想把这个文件放到GAC里面.如果这是一个第三方的DLL,你没有源代码,这会是一件比较麻烦的事情.有一个方法可以解决这个问题. 在VS.NET的命名行窗口下,输入如下的代码. 1 ,生成一个KeyFile sn -k keyPair.snk 2, 得到程序集的MSIL ildasm SomeAssembly.dll /out:SomeAssembly.il 3 ,为了避免冲突,把原来的DLL文件改名 ren SomeAssembly.dll Som

VS如何在调试时进入到dll文件

背景:    项目A:用C#写的一个类库文件 项目B:引用项目A的dll文件,完成编码,也是C#编写的. 需求:怎么能在调试的时候,调试断点能够从项目B中进入项目A中的代码. 解决办法就是: 假设,项目B引用的项目A的dll文件是 a.dll ,并且a中没有引用项目A中其他的文件或者命名空间.如果a.dll中还引用了A项目下的其他命名空间的内容,如a2,那么在下面的操作也要包含a2的对应部分. 将项目A下A.Web文件夹下bin文件夹(即路径:A/A.Web/bin/ )下的 a.dll与a.p

如何生成带注释的DLL文件

背景: 实际上并不是生成带有注释的DLL文件,而是同时生成一个XML文件,用来显示注释. 为什么要使用DLL文件,在C#编程的过程中,一直在使用DLL文件,如System.dll 方法: 1,创建类库项目. 2,在项目中创建相关的类和方法.并对代码进行注释. 3,类库项目上,右键属性——生成——输出,勾选XML文档文件,选择文档名称,以及DLL文件的输出路径,如图: 4,对项目进行生成,即可获得对应的DLL文件和XML文件.如图: 5,在其他的项目中,对这个DLL文件引用即可.F12找到源文件时

VC6.0 调试.dll文件

对于自己制作的.DLL文件,一直没有比较好的调试方法,其实是知道的太少. 下面就说说VC6.0下面 怎么调试DLL文件: 首先得有一个调用DLL文件的可执行程序,然后调用这个可执行程序. 在工程上 右键  settings  在弹出的对话框中,选择debug标签,然后设置executable for debug session:  在这里面填写可执行程序的路径 eg:C:\Program Files\Java\jdk1.6.0_15\bin\java.exe Working directory 

LIB文件和DLL文件的作用

(1)lib是编译时需要的,dll是运行时需要的.如果要完成源代码的编译,有lib就够了.如果也使动态连接的程序运行起来,有dll就够了.在开发和调试阶段,当然最好都有.(2)一般的动态库程序有lib文件和dll文件.lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的.如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中.如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中.静态编译的lib文件有好处:给用户安装时就

C#调试含有源代码的动态链接库遇见there is no source code available for the current location提示时的解决方案

C#调试含有源代码的动态链接库遇见there is no source code available for the current location提示时的解决方案: 1.首先试最常规的方法:Clean and then rebuild solution,但是没有解决 2.进入Tools>Options,选择Debugging>General 却掉 Enable address-level debugging 选项,在去掉 Require source files to exactly ma

lib和dll文件的区别和联系

什么是lib文件,lib和dll的关系如何 (2008-04-18 19:44:37)    (1)lib是编译时需要的,dll是运行时需要的. 如果要完成源代码的编译,有lib就够了. 如果也使动态连接的程序运行起来,有dll就够了. 在开发和调试阶段,当然最好都有. (2)一般的动态库程序有lib文件和dll文件.lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的.如果有 dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中.如果只有lib

C# 将已有程序封装为DLL文件,供其他程序调用

如果开发的程序很大,功能很复杂,载入时就很慢,用户感受不好,因此可以将一些功能分开,单独封装为DLL文件,当程序运行时有需要时才调用,加快程序响应速度. 在网上搜索了一下,其实过程比较简单: 打开工程---“解决方案”下方一行---属性---应用程序---修改“输出类型”为“类库”,F5编译程序即可. 此时,会有错误提示如下: ---------------------------Microsoft Visual Studio---------------------------无法直接启动带有

C语言dll文件的说明以及生成、使用方法

最近在搞一些小项目,由于要涉及到跟其它语言进行交互,动态链接库变成了不二的选择.为此也查阅了很多资料,将动态链接库的相关知识在此做一个整理. 一.动态链接库概述 动态链接库(Dynamic Link Library )是一种不可执行的二进制程序文件,它允许多个程序共享执行特殊任务所必需的代码和其他资源.Windows 中,DLL 多数情况下是带有 ".dll" 扩展名的文件,但也可能是 ".ocx"或其他扩展名:Linux系统中常常是 ".so"