Въпрос #2925 ...какъв е проблема - как да проследя DLL в Delphi 2009

Общност от програмисти Комуникация, помощ, обмяна на опит

Delphi.int.ru Expert

Други раздели на портала

Преминете към въпрос:

Статистика за днес:

Въпроси:0 Отговори:0 Мини форуми:0

Топ експерти

Въпрос # 2 925

Добър ден, скъпи експерти! Сблъсках се с този проблем - как да проследя DLL в Delphi 2009.

Точките на прекъсване стават неактивни (зелени) при компилиране. В Delphi 2007 (CodeGear Rad studio 2007) всичко работи добре в Delphi 7 също.

Освен това - след сравняване на настройките на дебъгерите в Delphi, в Delphi 2009, Tools-options-CodeGear Debbugers активира квадратчето за отметка на множество оценители. Точките на прекъсване станаха активни по време на компилация, но проследяването на dll през (F7) отваря прозореца на процесора. Как да го премахнете? така че да не изскача постоянно по време на проследяване.

Всичко работеше добре в предишните версии на Delphi.

Всички опции са активирани: информация за отстраняване на грешки. и т.н., конфигурацията на компилацията е превключена на Debug, exe е посочен в хост приложението.

Конфигурация: Windows Vista SP1, CodeGear Rad Studio 2009 версия 12.0.3420.21218 Архитект.

Прилагам прост пример за глупав код:

  1. Форма
  2. единица Единица1;
  3. интерфейс
  4. използва
  5. Windows, съобщения, SysUtils, варианти, класове, графики, контроли, формуляри,
  6. Диалогови прозорци, StdCtrls;
  7. Тип
  8. TForm1 = клас (TForm)
  9. Бутон1: TButton;
  10. Етикет1: Етикет T;
  11. процедура Button1Click(Подател: TObject);
  12. частен
  13. публичен
  14. край;
  15. вар
  16. Формуляр1: TForm1;
  17. изпълнение
  18. функция Showmy(x, y: цяло число; z: низ) :низ; stdcall;
  19. външен 'project1.dll';
  20. процедура TForm1.Button1Click(Подател: TObject);
  21. започвам
  22. Label1.Caption := showmy(3, 10, 'ние');
  23. край;
  24. край.
  25. DLL
  26. библиотека Проект1;
  27. използва
  28. сисутилис,
  29. класове;
  30. функция Showmy(x, y: цяло число; z: низ): низ ;stdcall;
  31. вар
  32. a, b : цяло число;
  33. c : низ
  34. започвам
  35. a := 23 + x;
  36. b := a + y;
  37. c := floattostr(b) + z;
  38. Резултат := c;
  39. край;
  40. износ
  41. шоуми;
  42. започвам
  43. край.

Въпрос мини-форум

Написахме много неща, но не написахме как точно правите отстраняване на грешки. Съгласно правилата е необходимо да се поддържат DLL източниците отворени в Delphi и да се посочи самото приложение като хост приложение. По този начин ще бъде възможно да се отстранят грешки в dll, но не и в самото приложение.

Направих точно това, винаги отварям списъка с DLL (ctrl + v) и Unit1 от главния формуляр все още е отворен, когато проследя, отварям раздела DLL за списък (където се поставят точките на прекъсване), в приложенията run -parameters-Debugger-Host посочвам приложение (пътят на exe файла от групата на проекта, който е в Project Manager). Програмата стартира (Application.Initialize и т.н.), натискам бутона за извикване на функция от D LL (в главния формуляр), проследяването отива към процедурата на бутона Onclick и т.н., след това отива към външния 'Protect.dll' (където сме декларирали функцията, която е описана в DLL), след това F7 отново и прозорецът на процесора се отваря и след това проследява през асемблера.

2. Натискам F9, програмата стартира, натискам бутона на формата, провежда се обажданефункция, точката на прекъсване се задейства (курсорът спира на точката на прекъсване в DLL) и прозорецът на процесора се отваря отново, когато се затвори и след натискане на F7 изскача отново. Като този.

Изглежда, че намерих изход от ситуацията.

Моите действия: Премахнато по дяволите с Rad Studio 2009, почистих регистъра и папките на временни файлове от Rad Studio 2009 с програми

RegOrganizer 4.23 и WinTools.net Professional 10.1, както и обработва всичко останало от Rad Studio 2009 (папка CodeGear) и C:\Windows\assembly дори премахна всичко свързано с borland. Рестартиран. Отново инсталирах Rad Studio 2009, в Rad Studio 2009 -Tools-options-CodeGear Debbugers маркираха множество оценители, активираха Project-Options- Linking-Debug информация (true), възстановиха DLL и EXE, зададоха Break на DLL и компилираха. Всичко работи както трябва, процесорът не се срива, всичко в списъка с DLL се проследява нормално.

Може би причината беше следната: когато изберете DLL в Project Manager (направете го активен) и в конфигурацията на компилация превключите на Release after compilation, прозорецът на CPU започва да изскача. Но след това проверих всичко, exe и DLL build Configuration was on debug. Може би проблем. Какво е вашето мнение?

Благодаря за отговора на въпроса ми.