1. 程式人生 > >Debugger DataSet 除錯時檢視DataSet

Debugger DataSet 除錯時檢視DataSet

delphi  跟蹤除錯的時候檢視DataSet資料記錄 Ctrl+F7
除錯 增強工具DataSet
http://edn.embarcadero.com/article/40268

http://docwiki.embarcadero.com/RADStudio/XE6/en/Debugger_Visualizers

http://docwiki.embarcadero.com/RADStudio/XE6/en/What%27s_New_in_Delphi_and_C++Builder_2010#Debugger_Changes

http://www.jed-software.com/xepp_screen.htm

http://www.soundvibe.net/blog/tcolor-visualizer/

Delphi 2010 Feature Highlight - Debugger Visualizers
Debugger Example
D:\Program Files (x86)\Embarcadero\RAD Studio\12.0\source\Visualizers\StringListVisualizer.pas
StringList檢視器
XE5中delphi起作用,可以看到每行的元素值,c++builder怎麼調不出來啊,原來是strings只有delphi的,在option裡的Debugger Options\Visualizers看到沒有c++描述支援

 TStringList *ls;
 ls 
= new TStringList(); ls->Add("aaa"); ls->Add("bbb"); ls->Add("ccc"); delete ls; ls = NULL;
  sl := TStringList.Create;
  sl.Add('aaa');
  sl.Add('bbb');
  sl.Add('ccc');
  FreeAndNil(sl);

Da

日期變數檢視器
teTimeVisualizer.pas
官方提供的時間型別觀察器,如果禁用的話,只可以看到float型別的數字,看不到日期格式,太不方便了,delphi和c++builder都可以。
 TDateTime  mydt;
 mydt = TDateTime::CurrentDateTime();
http://stackoverflow.com/questions/2556146/improve-speed-of-own-debug-visualizer-for-delphi-2010
http://delphi.netcode.cz/text/tdataset-debug-visualizer.aspx
http://bbs.cnpack.org/redirect.php?tid=3323&goto=lastpost&styleid=1&sid=3NVH51
---------------------

DebugSvcs: IOTADebuggerServices;
DebugSvcs.CurrentProcess.CurrentThread.Evaluate()

IOTAThread.Evaluate

TDataSet
在Delphi裡,用IOTAThread.Evaluate方法可以成功呼叫ClientDataSet和ADOQuery的SaveToFile方法儲存檔案,然後在DataSetVisualizer裡分別用ClientDataSet和ADOQuery的LoadFromFile方法裝載,然後關聯DataSource、DBGrid,就可以顯示了,速度極快!這樣Delphi就解決了!
但是上述方法不能解決c++builder,在cb環境下IOTAThread.Evaluate呼叫SaveToFile方法不成功,獲取屬性可以成功,比如Expression="ADOQuery1->RecordCount"之類可以成功,是不是XE的bug還是方法不對,也許根本不支援方法的呼叫。再找找吧
CB裡ClientDataSet,有XMLData屬性,是資料集的xml資料,可以取到,然後賦值給偵錯程式的ClientDataSet,這樣也就解決了。
CB裡的ADOQuery怎麼辦,他沒有類似的XMLData熟悉啊
另外,針對cb,還有用IOTAProcess.ReadProcessMemory()方法嘗試讀取記憶體地址,再轉換成DataSet不知行不行
cds1->SaveToFile("c:\\a",1) 這個可以成功,放在Evaluate/Modify視窗的Expression表達是裡輸入cds1->SaveToFile("c:\\a",1)可以成功,檔案也存上了。
用此方法可以了。
但是呼叫cds1->ClassName()
還是回出現錯誤E2122 Function call terminated by unhandled exception 0xc0000005 at address 0x5006677d

大功告成
可以檢視資料集了

---------------------