Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

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

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 925

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Я столкнулся с такой проблемой - как трассировать DLL в Delphi 2009.

Точки остановы(Break point) при компиляции становятся неактивны (зеленым цветом).
В Delphi 2007 (CodeGear Rad studio 2007) все нормально
работает и в Delphi 7 тоже.

Далее - после сравнения настроек debbugers в Delphi ях, в Delphi 2009, Tools-options-CodeGear Debbugers включил multiple evaluators галочку.
Точки остановы(Break point) при компиляции стали активны,
но при прослеживании dll через (F7) открывается окно CPU.
Как убрать его? чтобы оно постоянно не выскакивало при трассировки.

В предыдущих версиях Delphi все хорошо работало.

Все опции включены : debug info. и.т.д, build Configuration переключена на Debug, в host application указан exe.

Конфигурация : Windows Vista SP1, CodeGear Rad Studio 2009
version 12.0.3420.21218 Arhitect.

Прилагаю простой глупый пример кода:

Зарание спасибо.

Приложение:
  1.  
  2.  
  3. Form
  4.  
  5. unit Unit1;
  6.  
  7. interface
  8.  
  9. uses
  10. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  11. Dialogs, StdCtrls;
  12.  
  13. type
  14. TForm1 = class(TForm)
  15. Button1: TButton;
  16. Label1: TLabel;
  17. procedure Button1Click(Sender: TObject);
  18. private
  19. { Private declarations }
  20. public
  21. { Public declarations }
  22. end;
  23.  
  24. var
  25. Form1: TForm1;
  26.  
  27.  
  28. implementation
  29.  
  30. {$R *.dfm}
  31.  
  32.  
  33. function Showmy(x, y: integer; z: string) :string ; stdcall;
  34. external 'project1.dll';
  35.  
  36.  
  37. procedure TForm1.Button1Click(Sender: TObject);
  38. begin
  39. Label1.Caption := showmy(3, 10, 'we');
  40. end;
  41.  
  42. end.
  43.  
  44.  
  45.  
  46. DLL
  47.  
  48. library Project1;
  49.  
  50. uses
  51. SysUtils,
  52. Classes;
  53.  
  54.  
  55. function Showmy(x, y: integer; z: string): string ;stdcall;
  56. var
  57. a, b : integer;
  58. c : string;
  59. begin
  60. a := 23 + x;
  61. b := a + y;
  62. c := floattostr(b) + z;
  63. Result := c;
  64. end;
  65.  
  66.  
  67.  
  68. exports
  69. Showmy;
  70.  
  71.  
  72. begin
  73. end.


Lexxonhack Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Lexxonhack (статус: Посетитель)
Вопрос отправлен: 18 июня 2009, 02:58
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 18 июня 2009, 19:56; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 18 июня 2009, 10:16 [#1]:

Написали много всего, но не написали, как именно делаете отладку. По правилам надо держать в делфи открытыми исходники длл, а само приложение указать как host приложение. Таким образом получиться отлаживать длл, но не само приложение.
Галочка "подтверждения прочтения" - вселенское зло.
Lexxonhack

Lexxonhack (статус: Посетитель), 18 июня 2009, 19:56 [#2]:

Я так и делал, листинг DLL я всегда открываю(ctrl+v), и еще открыт Unit1 главной формы, когда трассирую открываю
вкладку DLL листинга(где и раставленны Breakpoints), в run -parameters-Debugger-Host applications указываю
приложение(путь exeшника из project Group который в Project Manager).Эффект тотже получался, даже двумя способами:
1.нажимаю F7 и жму поочередно,запускается программа (Application.Initialize ,и.т.д),нажимаю кнопку вызова функции из DLL(на главной форме) трассировка переходит на процедуру кнопки Onclick и.т.д далее попадает на external 'Protect.dll' (где мы объявляли функцию которая описана в DLL), потом опять F7 и открывается окно CPU и далее трассируется по ассемблеру.

2.нажимаю F9,запускается программа,нажимаю кнопку на форме,происходит вызов функции,Breakpoint срабатывает (курсор останавливается на Breakpoint в DLL) и опять открывается окно CPU, при его закрытии и после нажатия 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 поставил галочку multiple evaluators, включил в Project-Options-
Linking-Debug information (true), пересобрал DLL и EXE, поставил Break в DLL и скомпилировал. Все заработало как
надо, CPU не вылазит, нормально трассируется все в листинге DLL.

Возможно причина была вот в чем : когда в Project Manager выбираешь DLL (делаешь активной) и в build Configuration
переключаешь на Release после компиляции начинает вылазить окно CPU. Но тогда я все проверял, у exe и DLL build
Configuration была на debug. Возможно глюк!!! Какое ваше мнение?

Спасибо что ответили на мой вопрос.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:31
Выполнено за 0.03 сек.