|
Вопрос # 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.
Прилагаю простой глупый пример кода:
Зарание спасибо.
Приложение: Переключить в обычный режим-
-
- Form
-
- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls;
-
- type
- TForm1 = class(TForm)
- Button1: TButton;
- Label1: TLabel;
- procedure Button1Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
-
- implementation
-
- {$R *.dfm}
-
-
- function Showmy(x, y: integer; z: string) :string ; stdcall;
- external 'project1.dll';
-
-
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- Label1.Caption := showmy(3, 10, 'we');
- end;
-
- end.
-
-
-
- DLL
-
- library Project1;
-
- uses
- SysUtils,
- Classes;
-
-
- function Showmy(x, y: integer; z: string): string ;stdcall;
- var
- a, b : integer;
- c : string;
- begin
- a := 23 + x;
- b := a + y;
- c := floattostr(b) + z;
- Result := c;
- end;
-
-
-
- exports
- Showmy;
-
-
- begin
- end.
 |
Вопрос задал: Lexxonhack (статус: Посетитель)
Вопрос отправлен: 18 июня 2009, 02:58
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 2; последнее сообщение — 18 июня 2009, 19:56; участников в обсуждении: 2.
|
Вадим К (статус: Академик), 18 июня 2009, 10:16 [#1]:
Написали много всего, но не написали, как именно делаете отладку. По правилам надо держать в делфи открытыми исходники длл, а само приложение указать как host приложение. Таким образом получиться отлаживать длл, но не само приложение.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
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. Возможно глюк!!! Какое ваше мнение?
Спасибо что ответили на мой вопрос.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|