com+中跟踪调试的问题.......?????(100分)

  • 主题发起人 主题发起人 qiandeng
  • 开始时间 开始时间
Q

qiandeng

Unregistered / Unconfirmed
GUEST, unregistred user!
后台程序
host设置了dllhost.exe
param也设置了/processId:{.......}
在com+那也在调试那打了钩
但是问什么调试不了
客户端调试说服务器无法启动
中间层也停不下来
 
〉host设置了dllhost.exe
host设置为调用com+组件的可执行程序,例如,客户端应用程序。
〉在com+那也在调试那打了钩
不打钩试一试
 
楼上的你试过没有?
可别想当然呀
 
以下是我测试的结果:
李维书上调试例子(delphi6+windows 2000pro)
procedure TForm1.btnLoginClick(Sender: TObject);
var
// LoginObj : ImtsSecurityObj;
vCookie : OleVariant;
begin
if not assigned(LoginObj) then
LoginObj := ComtsSecurityObj.Create;
[red]//此处设置断点[/red]
// LoginObj := CreateComObject(CLASS_mtsSecurityObj) as ImtsSecurityObj;
LoginObj.Login(edtName.Text, edtPassword.Text, vCookie);
if (vCookie <> '') then
begin
edtCookie.Text := vCookie;
// edtCookie.Visible := True;
end
else
ShowMessage('無效的登錄');
end;
在com+组件设置的调试那[brown]不要[/brown]打钩
选PDemoProfileObject.dll,Run|Parameters
Host Application:C:/Program Files/MD53Demos/Ch06/DemoMTSObject/PClientDemo1.exe
Parameters:/ProcessID:{8DBEDFF5-7BC0-4BBC-8156-3212169EEF70}
按F9,输入姓名、密码,按登录按钮,可以trace into 到
class function ComtsSecurityObj.Create: ImtsSecurityObj;
begin
Result := CreateComObject(CLASS_mtsSecurityObj) as ImtsSecurityObj;
end;
但是,不能trace into 到
procedure TmtsSecurityObj.Login(const sName, sPassword: WideString;
var vCookie: OleVariant);
var
iCount : Integer;
aPerson : TSimpleProfile;
begin
vCookie := '';
for iCount := 0 to aProfile.Count - 1do
// Iterate
begin
aPerson := TSimpleProfile(aProfile.Items[iCount]);
if ( (aPerson.Name = sName) and (aPerson.Password = sPassword) ) then
vCookie := aPerson.Cookie;
end;
// for
end;
 
谢谢你的回答,但是
我的意思就是要跟踪com+内部去呀
 
class function ComtsSecurityObj.Create 在组件PDemoProfileObject.dll内的
PDemoProfileObject—TLB.pas里,可以跟踪。
procedure TmtsSecurityObj.Login(const sName, sPassword: WideString;
var vCookie: OleVariant);在组件PDemoProfileObject.dll内的uDemomtsProfile.pas
里,不能跟踪。
我也不知道为什么?
在procedure TmtsSecurityObj.Login内设置断点会打叉。
 
1.在调试器中启动前面打勾。
选择调试器路径为C:/Program Files/Borland/Delphi6/Bin/bordbg60.exe "dllhost.exe /ProcessID:{CBD3C605-C864-4CE8-B6E8-9E33FE32ACCD}
2。Delphi打开你的组件程序,在Run菜单的Parameters中设置
Host Application:c:/WINNT/system32/dllhost.exe
Parameters:/ProcessID:{CBD3C605-C864-4CE8-B6E8-9E33FE32ACCD}
3。很关键的一点:组件程序:project|option|linker|Include TD32 debug info 和Include remote debug symbols打勾
4。在组件程序中设置断点,点击Run执行你的组件程序。
5。执行你的调用的应用程序,会停在组件程序的断点上。
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=620616
看他们好像都解决了,我还没试过,快去看看吧
 
谢谢大家的回答
我按孤月独明的方法试了还是不行
1 服务器无法停下来
2 客户端提示'服务器运行失败'
 
强烈建议先编写一个最最简单的例子,比如只输出一个语句的方法。我也是通过此法
调成功的。调成功后,嘿嘿,再看看原来有什么错误。或者只打勾 include remote debug symbols试试
 
有个简单的办法: 开启2个delphi!
一个调试Client, 另一个调试Server.
在Client和Server里,你要调试的地方加 BreakPoint, 运行即可 :)
 
你们调试的时候,运行服务器的时候是不是应该处于等待状态的?
 
李维书上例子调试成功了,可以trace into 到procedure TmtsSecurityObj.Login。
注意两点,1.重建所有工程文件,2.COM+组件先启动,后打勾。其他同孤月独明所说。
在Delphi IDE里先Run组件,后Run客户端应用程序。不必开启2个delphi!
不过有时不打勾也行。
 
问题是我的服务器停不下来呀
 
你可以在控制面板-组件服务中右击你的COM+组件,再点击停止。
 
谢谢大家的回答
我的问题解决了,很简单,将dll重新注册就好了
原来的包有问题
 
多人接受答案了。
 
后退
顶部