Witam
DelphiXE5
używam dll z zewnętrzengo systemu. Do niedawna wszytko śmigało. Dzisiaj musiałem coś zmienić i po uruchomieniu F9 debugera, kompiluje się i kończy działanie.
Zero błedów. nie działa żaden "breakpoint", tylko tworzy exe (build configurationa ustawiony na debuger) i tyle
Wygląda jakby działa w trybie "release" ale na pewno tak nie jest
exe działa bez problemów
wywalenie wywołania tej dll powoduje że wszytko działa normalnie, można debugować program.
Wiecie może co może być tego przyczyną i jak to obejść/rowiązać ??
przebuduj (nie przekompiluj) projekt i jak nie pomoże to napisz jeszcze raz ale trochę bardziej czytelnie, a najlepiej aj screena (okna IDE!) z odpalonym programem pod debuggerem i z widokiem na jakiś breakpoint
@abrakadaber: przebudowywałem nic nie pomogło. Nie da się odpalić go pod debuggerem. Naciskam F9 kompiluje się, ładuje biblioteki i koniec tak jak bym przerwał uruchamianie.
Co ciekawe jak uruchamiam exe i robię Attach process to działa. Jak dam Run without debugging też działa
Zainstaluj aplikację ponownie. Usuń wszystkie wpisy w rejestrze regedit. Są aplikace, które potrafią określić lokalizację plików w folderach systemowych z których korzysta aplikacja a zatem Delphi. @JarekZ co oznacza? "używam dll z zewnętrzengo systemu".
JarekZ napisał(a):
DelphiXE5
No właśnie...
używam dll z zewnętrzengo systemu.
Co to za DLL jest i jak go używasz?
Do niedawna wszytko śmigało. Dzisiaj musiałem coś zmienić i po uruchomieniu F9 debugera, kompiluje się i kończy działanie.
Zero błedów. nie działa żaden "breakpoint", tylko tworzy exe (build configurationa ustawiony na debuger) i tyle
Wygląda jakby działa w trybie "release" ale na pewno tak nie jest
To co piszę nie ma nic wspólnego z DLL, aczkolwiek... W Delphi IDE wszystko jest możliwe ;-)
Ale do brzegu;
To, że w Delphi ustawisz release czy debug jeszcze niewiele znaczy.
Wielokrotnie na własnej skórze przekonałem się, że to nic nie znaczy.
Wersja podstawowa:
- Otwierasz opcje projektu w IDE.
- Wybierasz
Delphi compiler -> Compiling
i wybierasz zBulid confguration
opcjęBase
- Zaptaszasz w opcji
Base
wszystko co powinno być dla kompilacjiDebug
; czyli wszystko w sekcjiDebug
, ale w sekcjiCode Generation
wyłączaszOptimization
. - Wybierasz z
Bulid confguration
opcjęDebug
i upewniasz się, że żadna z opcji nie jest wytłuszczona (to oznacza że została nadpisana zBase
), a jeśli jest to klikasz aż nie bedzie.
Debug
ma niejako dziedziczyć wszystkie opcje z Base. - Wybierasz z
Bulid confguration
opcjęRelease
i zaznaczaszOptimization
, a odznaczasz wszystkie opcji z kategoriiDebug
. - Zapisujesz zmiany.
- Klikasz prawym na projekcie i wybierasz
Clean
- Zamykasz IDE
- Upewnij się czy po
Clean
nie masz nigdzie plików binarnych wyplutych przez kompilator (dcu, dcp. bpl, exe, itd.) - Włączasz IDE
- Robisz
Build
projektu
I może zadziała...
A jeśli nie zadziała, to:
- Wsuń wszystkie pliki projektu oprócz dpr - koniecznie usuń dproj i pochodne.
- Powtarzasz wszystkie kroki powyżej.
I znowu, może zadziała.
Mi zazwyczaj działa. Ale mam jeden projekt który za cholerę debugować się nie da.
Tzn. da się, ale nic nie podejrzysz w IDE - żadnej wartości zmiennej.
Zmieniam cokolwiek w ustawieniach projektu i mam "Internal Error"... kochane Delphi...
@wloochacz: ustawione mam tak jak piszesz, więc niestety to nie to.
Wspomniana dll to (brrrr) comarch cdn_api.dll podłączona statycznie.
Function XLLogin(LoginInfo:PXLLoginInfo;var Sesja:Longint):Longint; stdcall; external 'cdn_api.dll';
No i z nią jest jakaś "fuka" bo wgranie poprzedniej wersji comarchowej powoduje że działa tak jak powinno.
Może nawet to nie problem tego dll a tego co ona jeszcze "doładowywuje".
Może poprawią to co zepsute a może ten typ tak ma - taka odpowiedź dzisiaj padła ze strony help desku ;)
Ciekawe jest to, że brak błędu i tworzy exe (debug i release), które działają prawidłowo. Tak jak wcześniej pisałem na razie muszę niestety attach to process i wtedy działa debugowanie. Nie jest to super wygodne ale cóż.
Z góry zaznaczam, że nie mam już obecnie do czynienia z bibliotekami comarchu ale kilka lat temu osobiście miałem takie zdarzenie: delphi xe2, mam bibliotekę comarchu i opis do niej, czyli funkcjie ,parametry itp. Kompilacja programu ok, program uruchamia się, ale nie działa.. Kolega pod c# przeglądając te biblioteki zapodał, że opis który posiadałem do tek konkretnej funkcji i faktyczna jej deklaracja (typy parametrów) są różne.
Może podobnie, gdzieś tutaj leży problem?