BreakPoint
9 отговора
259 прегледа
BreakPoint
Имам програмна група с с няколко проекта - 1 exe и няколко DLL-a.Когато искам да трасирам някой DLL правя този проект активен слагам си Breakpoint,
в Run->Parameters указвам host application ,стартирам но не спира не breakpoint-а.
Какъв може да е проблема?
в Run->Parameters указвам host application ,стартирам но не спира не breakpoint-а.
Какъв може да е проблема?
Re: BreakPoint
1.Затвори делфито.
2.Изтрий DLL- ла който се е компилирал.
3.Провери дали exe- то не ползва DLL- ла от друга директория.
4.Отвори делфито
5.Компилирай DLL- ла и стртирай.
2.Изтрий DLL- ла който се е компилирал.
3.Провери дали exe- то не ползва DLL- ла от друга директория.
4.Отвори делфито
5.Компилирай DLL- ла и стртирай.
Re: BreakPoint
Всеки проект е в различна директория и това не мисля че е проблем.
Обясни малко по-подробно, че не виждам логиката.
Обясни малко по-подробно, че не виждам логиката.
Re: BreakPoint
Първо се увери, че програмата ти зарежда dll-а от директорията, в която той се записва от компилатора. След това стартирай приложението си. Когато dll-а бъде зареден отвори Modules прозореца (View -> Debug windows -> Modules или Ctrl+Alt+M). Намери къде е твоя dll - десен бутон на него и Reload Symbol Table. Посочи dll-а в папката, в която е бил компилиран (и зареден оттам). Сега би трябвало да ти спира на breakpoint-ите (освен ако не си го изключил от настройките на ide-то).
Кажи дали е станало, че ако не е да измислим нещо друго
Успех!
Кажи дали е станало, че ако не е да измислим нещо друго
Успех!
Re: BreakPoint
Обикновено DLL- ите използвани от EXE са в неговата директория.
Или в Sistem32 или в директориите в които се търси и т.н.
Аз си слагам DLL- ите при EXE- то.
Тук не става въпрос каде са файловете на различните проекти.
Те могат да са навсякъде.
Проблема идва от това, че EXE- то е пускано с DLL- а/ите без Delphi.
Може би Win- а да е кеширал файла на DLL- a или Delphi се шашка.
Точно обяснение не мога да дам, но когато рестартираш Delphi, нещата се оправят. За по сигурно изтривам DLL- а/ите и ги компилирам наново.
Или в Sistem32 или в директориите в които се търси и т.н.
Аз си слагам DLL- ите при EXE- то.
Тук не става въпрос каде са файловете на различните проекти.
Те могат да са навсякъде.
Проблема идва от това, че EXE- то е пускано с DLL- а/ите без Delphi.
Може би Win- а да е кеширал файла на DLL- a или Delphi се шашка.
Точно обяснение не мога да дам, но когато рестартираш Delphi, нещата се оправят. За по сигурно изтривам DLL- а/ите и ги компилирам наново.
Re: BreakPoint
настрой DLL- а да се компилира при EXE- то.
Project > Options... > Directories/Conditionals > Output Directory
Project > Options... > Directories/Conditionals > Output Directory
Редактирано от vido на
Re: BreakPoint
НЕ става, къде трябва да видя в настройките на IDE-то да не е изключено?
Re: BreakPoint
Много щеше да ни помогнеш ако беше дал малко информация за конфигурацията на проекта, директории и т.н., но... Сега ще ти опиша КАК ТРЯБВА да го направиш, а ако не е така...
1) Имаш два проекта. Да ги наречем MyApplication.dpr и MyLibrary.dpr. Те се намират съответно в C:\MyApplication\Source и C:\MyLibrary\Source.
2) Изходните файлове на проектите се генерират в директория C:\MyApplication\exe. Това се определя от настройката Project -> Options -> Directories/Conditionals -> Directories -> Output Directory.
3) В диалога Project -> Options -> Compiler -> Debugging се увери, че всички опции без последната (Use Debug DCUs) са отметнати.
4) Build-ни и двата проекта (за целта най-добре е да си направиш project group, за да не превключваш между две IDE-та или два проекта).
5) Зареди MyLibrary.dpr и установи Run -> Parameters -> Host Application да ти е C:\MyApplication\exe\MyApplication.exe. Сега можеш да си стартираш библиотеката. Стартира се твоето приложение.
5а) Библиотеката ти се зарежда динамично (с LoadLibrary): След зареждането на библиотеката от приложението ти изпълни стъпките, за които ти писах в предния си пост.
5б) Библиотеката се зарежда автоматично: Веднага след стартирането на приложението можеш да пристъпиш към стъпките от предния ми пос.
6) След като си указал валидния файл за symbil table (в случая това е C:\MyApplication\exe\MyLibrary.dll) breakpoint-ите ти от залени (невалидни) трябва да станат червени (валидни) и съответно да спира на тях.
Ако след като направиш всичко точно по този начин дебъгера продължава да не ти спира на точните на прекъсване - седни и опиши много подробно какво правиш или най-добре дай и сорса на проектите ти. В противен случай ще е много трудно да ти кажем къде грешиш.
Успех!
1) Имаш два проекта. Да ги наречем MyApplication.dpr и MyLibrary.dpr. Те се намират съответно в C:\MyApplication\Source и C:\MyLibrary\Source.
2) Изходните файлове на проектите се генерират в директория C:\MyApplication\exe. Това се определя от настройката Project -> Options -> Directories/Conditionals -> Directories -> Output Directory.
3) В диалога Project -> Options -> Compiler -> Debugging се увери, че всички опции без последната (Use Debug DCUs) са отметнати.
4) Build-ни и двата проекта (за целта най-добре е да си направиш project group, за да не превключваш между две IDE-та или два проекта).
5) Зареди MyLibrary.dpr и установи Run -> Parameters -> Host Application да ти е C:\MyApplication\exe\MyApplication.exe. Сега можеш да си стартираш библиотеката. Стартира се твоето приложение.
5а) Библиотеката ти се зарежда динамично (с LoadLibrary): След зареждането на библиотеката от приложението ти изпълни стъпките, за които ти писах в предния си пост.
5б) Библиотеката се зарежда автоматично: Веднага след стартирането на приложението можеш да пристъпиш към стъпките от предния ми пос.
6) След като си указал валидния файл за symbil table (в случая това е C:\MyApplication\exe\MyLibrary.dll) breakpoint-ите ти от залени (невалидни) трябва да станат червени (валидни) и съответно да спира на тях.
Ако след като направиш всичко точно по този начин дебъгера продължава да не ти спира на точните на прекъсване - седни и опиши много подробно какво правиш или най-добре дай и сорса на проектите ти. В противен случай ще е много трудно да ти кажем къде грешиш.
Успех!
Re: BreakPoint
Извинявам се че не съм обяснил добре.
Става въпрос за Делфи 4.В диалога Project -> Options -> Compiler -> Debugging липсва Use Debug DCUs, но както разбирам то не ми и трябва в случая, така че дотук проблеми не трябва да има.
В Modules прозореца на десен бутон върху DLL-a няма Reload Symbol Table, което предполагам, че ще е проблем.
Иначе всичко друго е така като си ми описал в последния ти пост.
Използва се Д4 заради стари проекти.
Става въпрос за Делфи 4.В диалога Project -> Options -> Compiler -> Debugging липсва Use Debug DCUs, но както разбирам то не ми и трябва в случая, така че дотук проблеми не трябва да има.
В Modules прозореца на десен бутон върху DLL-a няма Reload Symbol Table, което предполагам, че ще е проблем.
Иначе всичко друго е така като си ми описал в последния ти пост.
Използва се Д4 заради стари проекти.
Re: BreakPoint
Вече нямам инсталирано Delphi 4, така че не мога да видя как са нещата в него, но трябва да са аналогични. Поразгледай из хелпа няма ли писано нещо по въпроса...