精华内容
下载资源
问答
  • 由于Delphi 7、2007和 2010在界面上乃至功能上的一些变化,所以在动态链接库DLL断点调试上,有较大的变化。在今后几天的时间中,笔者会以三篇文章来分别详细地介绍Delphi 7、2007和 2010这三个版本中的DLL断点调试...
  • 本篇文章来详细地介绍 Delphi 2007中的动态链接库DLL断点调试技术。
  • DELPHI 2010 动态链接库DLL断点调试 马根峰 (广东联合电子服务股份有限公司,广州 510300) 摘要:本文详细介绍了Delphi 2010中的动态链接库DLL断点调试技术 关键词:DELPHI 2010;Dll断点调试; 1...

    DELPHI 2010 动态链接库DLL断点调试

               马根峰 

                (广东联合电子服务股份有限公司,广州 510300)

     

     

    摘要:本文详细介绍了Delphi 2010中的动态链接库DLL断点调试技术

    关键词DELPHI 2010Dll断点调试;

     

     

     

    1      Delphi几个经典版本简介 

    Delphi1995年的 1.0版本,发展到现在的最新的XE3版本,历经N多版本,但最为经典的几个版本个人觉得应属 7.02007 2010

    Delphi 7.0应该是Delphi用户最多的版本。

    Delphi 2007是功能就不多说了,归根结底一句话,它是 AnsiString的最后一个版本,在Delphi 2007中,string类型映射为AnsiStringchar类型映射为AnsiCharPchar类型映射为PAnsiChar。所以DELPHI低版本的程序可以较轻松地迁移到DELPHI 2007版本。Delphi 2007也是Delphi程序员很容易上手的晚期版本。

    Delphi2009开始起,到现在的Delphi XE3为止,都是 unicode版本。String类型映射为 UnicodeString而不是 AnsiStringChar类型映射为 WideCharPChar类型映射为 PWideChar

    由于Delphi 7.02007 2010在界面上乃至功能上的一些变化,所以在动态链接库DLL断点调试上,有较大的变化。在今后几天的时间中,笔者会以三篇文章来分别详细地介绍Delphi 7.02007 2010这三个版本中的DLL断点调试技术。

    本篇文章来详细地介绍 Delphi 2010中的动态链接库DLL断点调试技术。

     

     

     

    2    DELPHI 2010DLL断点设置与DLL调试

    DELPHI 7.0以及以前的版本中,动态链接库的调试方法如下:

    点击菜单Run-->Parameters.打开Run Parameters窗口,如图1所示。 

          图点击菜单Run-->Parameters.打开Run Parameters窗口

     

    设置图中断点,然后点击F9或者Run—Run来运行宿主程序Delphi2007_Dll_Debug.exe,但发现断点无效,如图2所示:  

          设置断点后,运行宿主程序Delphi2007_Dll_Debug.exe,断点无效

     

    点击Project-->Options..,在Project Options窗口中,在Delphi Compiler—Compiling属性页中将Debug information设置为True,如图3所示: 

          Delphi Compiler—Compiling属性页中将Debug information设置为True

     

    点击Project-->Options..,在Project Options窗口中,在Delphi Compiler—Linking属性页中将Debug informationInclude remote debug symbols两项设置为True,如图4所示:  
           Debug informationInclude remote debug symbols两项设置为True

     

    运行宿主程序Delphi2007_Dll_Debug.exe,断点还是无效,如图5所示:
     

          运行宿主程序Delphi2007_Dll_Debug.exe,发现断点还是无效

     

    切换到DelphiDLL工程文件上,点击ctrl+alt+M,跳出一个名叫Modules的窗体来。左上角显示了宿主程序本身及其它所调用的资源。

    找到动态链接库 Magenf_Detail.dll项,发现目录没有指向当前DLL所在的目录。点击鼠标右键,选中菜单项“Reload Symbol Table…”如图6所示:
     
     

          打开Modules属性页,找到Magenf_Detail.dll项,点击鼠标右键,Reload Symbol Table…

     

    重新设置动态链接库Magenf_Detail.dll的位置,选中当前DLL工程Magenf_Detail所在目录的动态链接库Magenf_Detail.dll文件,如图7所示:
     
     

          打开Modules属性页,找到Magenf_Detail.dll项,点击鼠标右键,Reload Symbol Table…,重新设置它的位置

     

    然后切换到Delphi的属性页Magenf_Detail,发现断点生效,如图8所示:
     

          点击属性页Magenf_Detail,发现断点生效

     

    Delphi2007_Dll_Debug.exe,输入 12后点击铵钮“=”,如图9所示: 
     

          Delphi2007_Dll_Debug.exe,输入 12后点击铵钮“=

     

    进入DLL断点调试,如图10所示:



          
    10 进入DLL的断点调试

     

     

     

    3        例子中的宿主程序及DLL程序代码

    -------宿主程序代码-----

    unit UDllDebug;

     

    interface

     

    uses

      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

      Dialogs, StdCtrls, ExtCtrls, Buttons, Contnrs ,  ActiveX, StrUtils ;

     

    type

     

      

     

        

      TDll_Add=function(int_1,int_2:integer):integer;stdcall;

      TfrmDllDebug = class(TForm)

        Edit1: TEdit;

        Edit2: TEdit;

        Label1: TLabel;

        Edit3: TEdit;

        BtnAdd: TButton;

        procedure FormCreate(Sender: TObject);

        procedure FormClose(Sender: TObject; var Action: TCloseAction);

        procedure BtnAddClick(Sender: TObject);

      private

        { Private declarations }

      public

        { Public declarations }

     

        HInst:Thandle;                                    

        FDll_Add:TFarProc;

        functionDll_Add:TDll_Add;

     

        //aForeThread:MuliThread;

      end;

     

    var

      frmDllDebug: TfrmDllDebug;

     

    implementation

     

    {$R *.dfm}

     

     

     

                   

      

    procedure TfrmDllDebug.FormCreate(Sender: TObject);

    begin

           hinst:=loadlibrary('Magenf_Detail.dll'); 

           if hinst>0 then

           begin

                 FDll_Add:=getprocaddress(hinst,pchar('Dll_Add'));

     

                 if FDll_Add<>nil then

                    functionDll_Add:=TDll_Add(FDll_Add)

                 else

                    messagedlg(&apos;Fatal error! Function not be found!&apos;,mtWarning, [mbYes], 0) ;

             end

             else

                 messagedlg(&apos;Fatal error! Magenf_Detail.dll not be found!&apos;,mtWarning, [mbYes], 0) ;

     

    end;

     

    procedure TfrmDllDebug.FormClose(Sender: TObject;

      var Action: TCloseAction);

    begin

        try

            freelibrary(hinst);

        except

        end;

     

    end;

            

     

     

     

     

    procedure TfrmDllDebug.BtnAddClick(Sender: TObject);

    var

        int1,int2,int_return:integer;

    begin

     

        int1:=strToInt(edit1.Text);

        int2:=strToInt(edit2.Text);

        int_return:=functionDll_Add(int1,int2);

        edit3.Text :=intToStr(int_return);

     

    end;

     

    end.

    -------宿主程序代码-----

     

    -------DLL程序代码-----

    library Magenf_Detail;

      

    uses

      SysUtils,Classes;

     

    {$R *.RES}

     

     

     

    function    Dll_Add(int_1,int_2:integer):integer;stdcall;

    var

         intSum:integer;

    begin

        intSum:=int_1+int_2;

        result:=intSum;

    end;

     

     

    exports

        Dll_Add;

     

    end.

     

    -------DLL程序代码-----

    转载于:https://www.cnblogs.com/s-Yang/p/3152082.html

    展开全文
  • 本篇文章来详细地介绍 Delphi 2010中的动态链接库DLL断点调试技术。
  • 本篇文章来详细地介绍 Delphi 7中的动态链接库DLL断点调试技术。
  • DELPHI 2010 动态链接库DLL断点调试

    千次阅读 2013-03-04 12:12:49
    DELPHI 2010 动态链接库DLL断点调试  马根峰   (广东联合电子服务股份有限公司,广州 510300)   摘要:本文详细介绍了Delphi 2010中的动态链接库DLL断点调试技术 关键词:DELPHI 2010;Dll断点调试;   ...

     

    DELPHI 2010 动态链接库DLL断点调试

               马根峰 

                (广东联合电子服务股份有限公司,广州 510300)

     

    摘要:本文详细介绍了Delphi 2010中的动态链接库DLL断点调试技术

    关键词DELPHI 2010Dll断点调试;

     

     

     

    1      Delphi几个经典版本简介 

    Delphi1995年的 1.0版本,发展到现在的最新的XE3版本,历经N多版本,但最为经典的几个版本个人觉得应属 7.02007 2010

    Delphi 7.0应该是Delphi用户最多的版本。

    Delphi 2007是功能就不多说了,归根结底一句话,它是 AnsiString的最后一个版本,在Delphi 2007中,string类型映射为AnsiStringchar类型映射为AnsiCharPchar类型映射为PAnsiChar。所以DELPHI低版本的程序可以较轻松地迁移到DELPHI 2007版本。Delphi 2007也是Delphi程序员很容易上手的晚期版本。

    Delphi2009开始起,到现在的Delphi XE3为止,都是 unicode版本。String类型映射为 UnicodeString而不是 AnsiStringChar类型映射为 WideCharPChar类型映射为 PWideChar

    由于Delphi 7.02007 2010在界面上乃至功能上的一些变化,所以在动态链接库DLL断点调试上,有较大的变化。在今后几天的时间中,笔者会以三篇文章来分别详细地介绍Delphi 7.02007 2010这三个版本中的DLL断点调试技术。

    本篇文章来详细地介绍 Delphi 2010中的动态链接库DLL断点调试技术。

     

     

     

    2    DELPHI 2010DLL断点设置与DLL调试

    DELPHI 7.0以及以前的版本中,动态链接库的调试方法如下:

    点击菜单Run-->Parameters.打开Run Parameters窗口,如图1所示。 

          图点击菜单Run-->Parameters.打开Run Parameters窗口

     

    设置图中断点,然后点击F9或者Run—Run来运行宿主程序Delphi2007_Dll_Debug.exe,但发现断点无效,如图2所示:  

          设置断点后,运行宿主程序Delphi2007_Dll_Debug.exe,断点无效

     

    点击Project-->Options..,在Project Options窗口中,在Delphi Compiler—Compiling属性页中将Debug information设置为True,如图3所示: 

          Delphi Compiler—Compiling属性页中将Debug information设置为True

     

    点击Project-->Options..,在Project Options窗口中,在Delphi Compiler—Linking属性页中将Debug informationInclude remote debug symbols两项设置为True,如图4所示:  
           Debug informationInclude remote debug symbols两项设置为True

     

    运行宿主程序Delphi2007_Dll_Debug.exe,断点还是无效,如图5所示:
     

          运行宿主程序Delphi2007_Dll_Debug.exe,发现断点还是无效

     

    切换到DelphiDLL工程文件上,点击ctrl+alt+M,跳出一个名叫Modules的窗体来。左上角显示了宿主程序本身及其它所调用的资源。

    找到动态链接库 Magenf_Detail.dll项,发现目录没有指向当前DLL所在的目录。点击鼠标右键,选中菜单项“Reload Symbol Table…”如图6所示:
     
     

          打开Modules属性页,找到Magenf_Detail.dll项,点击鼠标右键,Reload Symbol Table…

     

    重新设置动态链接库Magenf_Detail.dll的位置,选中当前DLL工程Magenf_Detail所在目录的动态链接库Magenf_Detail.dll文件,如图7所示:
     
     

          打开Modules属性页,找到Magenf_Detail.dll项,点击鼠标右键,Reload Symbol Table…,重新设置它的位置

     

    然后切换到Delphi的属性页Magenf_Detail,发现断点生效,如图8所示:
     

          点击属性页Magenf_Detail,发现断点生效

     

    Delphi2007_Dll_Debug.exe,输入 12后点击铵钮“=”,如图9所示: 
     

          Delphi2007_Dll_Debug.exe,输入 12后点击铵钮“=

     

    进入DLL断点调试,如图10所示:



          
    10 进入DLL的断点调试

     

     

     

    3        例子中的宿主程序及DLL程序代码

    -------宿主程序代码-----

    unit UDllDebug;

     

    interface

     

    uses

      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

      Dialogs, StdCtrls, ExtCtrls, Buttons, Contnrs ,  ActiveX, StrUtils ;

     

    type

     

      

     

        

      TDll_Add=function(int_1,int_2:integer):integer;stdcall;

      TfrmDllDebug = class(TForm)

        Edit1: TEdit;

        Edit2: TEdit;

        Label1: TLabel;

        Edit3: TEdit;

        BtnAdd: TButton;

        procedure FormCreate(Sender: TObject);

        procedure FormClose(Sender: TObject; var Action: TCloseAction);

        procedure BtnAddClick(Sender: TObject);

      private

        { Private declarations }

      public

        { Public declarations }

     

        HInst:Thandle;                                    

        FDll_Add:TFarProc;

        functionDll_Add:TDll_Add;

     

        //aForeThread:MuliThread;

      end;

     

    var

      frmDllDebug: TfrmDllDebug;

     

    implementation

     

    {$R *.dfm}

     

     

     

                   

      

    procedure TfrmDllDebug.FormCreate(Sender: TObject);

    begin

           hinst:=loadlibrary(&apos;Magenf_Detail.dll&apos;); 

           if hinst>0 then

           begin

                 FDll_Add:=getprocaddress(hinst,pchar(&apos;Dll_Add&apos;));

     

                 if FDll_Add<>nil then

                    functionDll_Add:=TDll_Add(FDll_Add)

                 else

                    messagedlg(&apos;Fatal error! Function not be found!&apos;,mtWarning, [mbYes], 0) ;

             end

             else

                 messagedlg(&apos;Fatal error! Magenf_Detail.dll not be found!&apos;,mtWarning, [mbYes], 0) ;

     

    end;

     

    procedure TfrmDllDebug.FormClose(Sender: TObject;

      var Action: TCloseAction);

    begin

        try

            freelibrary(hinst);

        except

        end;

     

    end;

            

     

     

     

     

    procedure TfrmDllDebug.BtnAddClick(Sender: TObject);

    var

        int1,int2,int_return:integer;

    begin

     

        int1:=strToInt(edit1.Text);

        int2:=strToInt(edit2.Text);

        int_return:=functionDll_Add(int1,int2);

        edit3.Text :=intToStr(int_return);

     

    end;

     

    end.

    -------宿主程序代码-----

     

    -------DLL程序代码-----

    library Magenf_Detail;

      

    uses

      SysUtils,Classes;

     

    {$R *.RES}

     

     

     

    function    Dll_Add(int_1,int_2:integer):integer;stdcall;

    var

         intSum:integer;

    begin

        intSum:=int_1+int_2;

        result:=intSum;

    end;

     

     

    exports

        Dll_Add;

     

    end.

     

    -------DLL程序代码-----

     

     

        

     

    作者博客:

    CSDN博客:http://blog.csdn.net/magenfeng

    新浪博客: http://blog.sina.com.cn/magenfeng

    QQ空间: http://user.qzone.qq.com/630414817




     

     

    展开全文
  • dll断点调试方法

    千次阅读 2015-04-28 23:47:13
    dll调试方法: ...4.断点调试 非本进程dll错误处理方式: 0.把相关dll的pdb调试文件放到和的dll同目录 1.启动进程 2.找到调试-》窗口-》模块 (本进程所有相关的外部加载的dll
    dll调试方法:
    


    1.把最新生成的dll和pdb放到 启动这个dll 的进程目录下
    2.启动这个进程
    3.然后在dll 的项目中  调试选项-》附加到进程-》选择启动的这个进程
    4.断点调试




    非本进程dll错误处理方式:
    0.把相关dll的pdb调试文件放到和的dll同目录
    1.启动进程
    2.找到调试-》窗口-》模块  (本进程所有相关的外部加载的dll)(找到出问题的dll)
    3.在模块里面的符号状态一项 右键加载符号-》选择相关pdb
    4.调用调试信息直接查看错误代码
    展开全文
  • dll调试方法:1.把最新生成的dll和pdb放到 启动这个dll 的进程目录下2.启动这个进程3.然后在dll 的项目中 调试选项-》...断点调试非本进程dll错误处理方式:0.把相关dll的pdb调试文件放到和的dll同目录1.启动进程...

    转自:https://blog.csdn.net/qingzai_/article/details/45348613

     

    dll调试方法:


    1.把最新生成的dll和pdb放到 启动这个dll 的进程目录下
    2.启动这个进程
    3.然后在dll 的项目中  调试选项-》附加到进程-》选择启动的这个进程
    4.断点调试




    非本进程dll错误处理方式:
    0.把相关dll的pdb调试文件放到和的dll同目录
    1.启动进程
    2.找到调试-》窗口-》模块  (本进程所有相关的外部加载的dll)(找到出问题的dll)
    3.在模块里面的符号状态一项 右键加载符号-》选择相关pdb
    4.调用调试信息直接查看错误代码

     

    记住,同时只能有一个调试器在调试程序。

    转载于:https://www.cnblogs.com/jsfx/p/8987370.html

    展开全文
  • Delphi dll 断点调试

    2015-04-19 10:25:00
    1.dll 要有一个依托的exe(怎么做 相信用dll了一定知道) 2.选项中的compling中的debugging中的选项,linking中的所有选项 3.最后一个也就是最重要的 run中的parameters中的 host application选中依托的exe程序 ...
  • VS2003中DLL断点调试,不执行断点

    千次阅读 2015-08-03 14:48:02
    调试DLL中的源码,在DLL中设置断点,然后执行,选择外部exe文件运行,结果DLL中的断点全变成了问号,且执行不到。  问题分析:.ncb文件的问题。NCB是“No Compile Browser”的缩写,其中存放了供ClassView、...
  • 前记:用别人的东西真麻烦,一个小问题挡了我一周。... 菜单Run-Parameters-Host Application选择调用dll的那个exe。如果是xp操作系统,ctrl+alt+m把dll的路径指对,就可以了,如果是2000系统,就不用了
  • PhpStorm本地断点调试

    万次阅读 多人点赞 2017-09-27 09:44:49
    1、断点调试php环境搭建 2、开始你的断点调试 3、断点调试的一些简单操作
  • 并将引用工程的属性“Link Library Dependencies”的值设为true,这样,在不加入lib的情况下,exe项目仍可以链接dll正常运行,但问题也出现了,在dll工程中设置 的断点会被无视。 解决方法: 一、DLL工程的设置 ...
  • 文字较多,请耐心看完。解释得详细点总是比一笔带过的好。... 补充一点,Delphi5加载了模块后要调试dll,别忘了将project->project option->Linker底下的Exe and Dll options中,Include TD32 debug info 与 ...
  • ILRuntime无法断点调试

    2021-08-03 23:50:35
    ILRuntime无法断点调试
  • 工程是基于VS2008的C++项目,在项目中创建了另一个DLL工程,在C++工程中动态调用DLL,需要断点调试DLL工程中的代码。 运行主工程后,在DLL工程中加断点,程序并不能Debug进入,网上搜了一下,大家的方法都一样,...
  • jni断点调试

    千次阅读 2014-10-22 17:41:53
    jni 断点 调试
  • 今天想试验一把利用VS.net的插件断点调试外部无源码的DLL(只要是程序集都可以,所以exe也行)功能。   一.加载VS.net的Reflector插件 从官网下载的Reflector程序(最新版本为6.1.0)包中自带了VS.net的插件,...
  • 【Unity】DnSpy断点调试Unity已发行游戏的dll

    千次阅读 热门讨论 2020-04-10 21:38:56
    DnSpy是本人一直在用的反编译软件,很好用,今天闲来无事的时候用DnSpy的调试功能断点调试了一下Unity的游戏【发行版】,很好用,于是想着要分享给大家。 前期准备 DnSpy下载 Unity调试教程(英文教程) 使用方法...
  • 今天想试验一把利用VS.net的插件断点调试外部无源码的DLL(只要是程序集都可以,所以exe也行)功能。一.加载VS.net的Reflector插件从官网下载的Reflector程序(最新版本为6.1.0)包中自带了VS.net的插件,名称为...
  • 调试方法:【dll工程和调用dll的exe工程在同一个解决方案中】[本人自测 不在同一个解决方案中也是可以的,当然,本机要有dll源码] dll工程,属性-配置属性-调试-把 命令 为 调用该dll的exe工程的bin\Debug\*.exe ...
  • 上班调试DLL项目时提示 : 当前不会命中断点,还没有为该文档加载任何符号 问老员工也说可能是因为VC6工程,VS2008编译有问题。其实它VC6编译时部分应该命中的断点也无法命中。 搜了N久,然后在 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,552
精华内容 7,420
关键字:

dll断点调试