2008年4月24日

无聊的时候翻了一下收藏夹,看到了“通过崩溃地址找错误行数之Delphi版”,但地址已经失效了。通过Google找了一下,原来是CSDN的beyondtkl(大龙驹<*好久没来了,兄弟们好吧。*>)发在论坛中的。
整理一下,放在这里备份。
原地址:http://topic.csdn.net/t/20041130/12/3601416.htm

以前看了"通过崩溃地址找错误行数之VC版"那时候还没用DELPHI,昨晚刚好又看到了,所以就试了一下DELPHI的,与大家共享。^_^
什么是MAP文件?简单地讲,MAP文件是程序的全局符号、源文件和代码行号信息的唯一的文本表示方法,它可以在任何地方、任何时候使用,不需要有额外的程序进行支持。而且,这是唯一能找出程序崩溃的地方的救星。
DELPHI下生成MAP文件的方法:偶只知道下面两种,如果谁知道其他的方法,敬请告知,多谢!
生成详细的MAP信息的方法:
  1. project -> options -> linker -> Map file 选择detailed.
  2. D:\Fred\Code\DELPHI\MyPas\ErrLineByAddr2>dcc32 -GD project1.dpr
我们的代码为:
unit Unit1;

//{$D+,L+}

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 
= class(TForm)
    Button1: TButton;
    
procedure Button1Click(Sender: TObject);
  private
    
{  Private  declarations  }
  public
    
{  Public  declarations  }
  
end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  I, J: Integer;
  p: PChar;
begin
  I :
= 10;
  J :
= 0;
  
//I := I div J;  //  32
  
//ShowMessage(IntToStr(I));
  p :
= nil;
  p^ :
= 'A';  //  38
end;

end.
想必大家看到了,会有返回0地址错误....我们这里就是要让它崩溃,让我让你崩溃!!^_^
然后执行 -> 点击 -> 然后出错 -> 我的机器上 -> 崩溃地址为0044d946
如果要查找代码行号,需要使用下面的公式做一些十六进制的减法运算:
0044d946 - 00400000 = 0004d946 - 00001000 = 0004c946
0004C946 就是它了,我们用UltraEdit32之类的工具打开.map文件,搜索"0004C94",找到了,然后就找0004c946的那个地址,然后看到了:
Line   numbers   for   Unit1(Unit1.pas)   segment   .text  
   
          
37   0001:0004C944         38   0001:0004C946         39   0001:0004C949         41   0001:0004C97C  
          
41   0001:0004C983  
  
O Yeah..<星际里面注射兴奋剂的声音 ^_^>..
"38   0001:0004C946"就是它了!!unit1.pas的第38行!!去代码里看一下,果然就是38行。^_^.....
共享ing...如果有不妥之处,敬请之处!多谢....

posted @ 2008-04-24 01:22 Povoz (Sean Lu) 阅读(875) 评论(1) 编辑

2008年4月8日

不知道大家是否注意到在PyDev的Console窗口中是不支持UTF-8输出的,这个问题早在2006年的时候就被提出来了。
但是这个问题到最近才有希望被官方解决,fabioz说,Fixed for 1.3.15,当前版本:1.3.14。

给大家一个临时解决的方法:
在 (Python安装目录)\Lib\site-packages 目录中新一个文件:sitecustomize.py,内容如下:
import sys
encoding 
= "UTF-8"

sys.setdefaultencoding(encoding)

测试一下:
在PyDev中新一个test.py文件,并确保test.py以UTF-8格式保存。
#!/usr/bin/env python
#
 -*- coding: utf-8 -*-

print u'中文'
Ctrl+F11 运行。
如果在Console窗口输出还有问题,请修改Run设置窗体的"Common"标签中的"Console Encoding"为UTF-8,重新运行。


posted @ 2008-04-08 23:43 Povoz (Sean Lu) 阅读(1028) 评论(1) 编辑

2008年4月4日

虽然Delphi 2007已经发布一年有余,但是在实际的工作中仍然是Delphi 7或更早的版本被大量使用。
WCF作为构建面向服务应用程序的统一框架,成为多年来Microsoft .NET发展过程中最重要的技术之一。
我是最近才开始关注WCF的,作为Microsoft分布式应用程序开发的集大成者,我首先想到的就是能否在以前的旧系统中使用WCF。
经过几天的摸索,终于成功地使用Delphi 7访问WCF服务,下面就来说一下开发过程。

1.更新Delphi SOAP Runtime and Importer。

    这一点非常的注要,因为原本Delphi 7自带的WSDLImp.exe无法正确生成WCF服务代理。CodeGear官方已经给出了更新,而且可以免费下载。
    下载地址:http://cc.codegear.com/Item/24535
    下载后的更新安装过程,请参照文件包中的readme.html文件。

2.为了测试,先在Visual Studio 2008中创建一个简单WCF服务。

    A.新建WCF服务网站;

    B.定义服务接口;这里我们简单的做一个加法运算,在IService.cs文件中加入下面代码:       
// 任务: 在此处添加服务操作
[OperationContract]
int Add(int a, int b);

    C.实现服务接口;在Service.cs文件中加入下面代码:
#region IService 成员
public int Add(int a, int b) {
    
return a + b;
}
#endregion

    D.修改服务的Binding属性为basicHttpBinding;
    可以直接修改Web.config文件,或通过Microsoft Service Configuration Editor进行编辑,打开Microsoft Service Configuration Editor(工具菜单->Microsoft Service Configuration Editor),然后打开我们的站点(Microsoft Service Configuration Editor的File菜单->WebHosted Service...->选择我们建立的WCF服务网站),在“Configuration”窗口中打开Endpoints(Services -> Service -> Endpoints),可以看到有两个Endpoint,其中一个的Binding属性为mexHttpBinding,保持不变,另外一个Endporint的Binding属性默认为wsHttpBinding,将其修改为basicHttpBinding,保存并退出。


    至此一个简单的WCF服务网站已经建立完成,可以通过 http://localhost/WCFService/Service.svc 查看。

3.生成WCF访问代理。
    因为前面我们已经更新了Delphi SOAP Runtime and Importer,现在可以在C:\Program Files\Borland\Delphi7\Bin找以WSDLImp.exe,更新后的版本为2.2.10138。
    在“命令提示符”中输入:WSDLImp http://localhost/WCFService/Service.svc?wsdl 就可以在当前目录下生成一个Service.pas文件。

4.创建Delphi 7应用程序。
创建一个Delphi 7应用程序,并引入上面我们创建的Service.pas文件。然后在主窗体中加入测试代码:
procedure TForm1.Button1Click(Sender: TObject);
var
  a, b, c:Integer;
begin
  a :
= StrToInt(Edit1.Text);
  b :
= StrToInt(Edit2.Text);

  c :
= GetIService.Add(a, b);  

  Label1.Caption :
= IntToStr(c);
end;

到这里,通过Delphi 7访问WCF服务已经实现了。但是要说的是这仅仅是第一步,在Delphi 7中是否可以充分利用WCF服务的功能还有待进一步摸索。

4月5日更新:
进一步摸索尝试之后,发现Delphi自身的SOAP Runtime对Web Service的新标准、特性支持并不好。
第三方库对SOAP也有支持,但效果并不理想。
Pure SOAP网络上有一些介绍,但没有找到下载。
IndySOAP目前版本是1.0,官方说明支持SOAP 1.2,但试用没有成功。
IP*Works支持SOAP,但仅限SOAP 1.1标准。

结论:在Delphi中仅能使用WCF中的基本功能,也就是兼容ASMX模式。
posted @ 2008-04-04 10:17 Povoz (Sean Lu) 阅读(2487) 评论(11) 编辑

2008年3月29日

来博客园的第一篇文字,推荐一款小工具吧。
pynpp - Python Plugins for Notepad++

http://code.google.com/p/pynpp/

This project aims to offer a more convenient, easy and fast way to write plugins for the Notepad++ editor using the Python programming language.

pynpp's screenshot
posted @ 2008-03-29 17:33 Povoz (Sean Lu) 阅读(2204) 评论(5) 编辑
仅列出标题  

导航

公告

统计