Forum PCLab.pl: VS 2017 debugowanie dll w C++ - Forum PCLab.pl

Skocz do zawartości

Otwarty

Ikona Najnowsze pliki

Strona 1 z 1
  • Nie możesz rozpocząć nowego tematu
  • Nie możesz odpowiadać w tym temacie

VS 2017 debugowanie dll w C++ Oceń temat: -----

#1 Użytkownik jest niedostępny   Alfer 

  • Małomówny
  • Pip
  • Grupa: Forumowicze
  • Postów: 5
  • Dołączył: Pt, 03 Maj 19

Napisany 03 Maj 2019 - 13:28

Uszanowanie

Jest tak. Mam bibliotekę w C++. Jakimś cudem po dwóch dniach udało mi się ją skompilować do debugowania pod VS 2017.
Ustawiłem aplikację nadrzędna którą wywołuje ową bibliotekę.
Ustawiłem sobie punkt zatrzymania.
Uruchamiam debugowanie.
Oczywiście nie zatrzymuje się na punkcie zatrzymania.
Kropka przy tym punkcie zmieniała się z wypełnionej na pusty okrąg z wykrzyknikiem i wielce mówiącym komunikatem

"Punkt przerwania nie zostanie teraz trafiony. Nie załadowano symboli dla tego dokumentu"

Mnie za to jednak zaraz coś trafi. To niech załaduje te symbole, chyba to logiczne, że skoro ustawiam punkt zatrzymania to skoro są potrzebne jakieś symbole to niech je sobie załaduje.

Pytanie:

Gdzie trzeba coś ustawić żeby owe mityczne symbole się załadowały?

-alfer

#2 Użytkownik jest niedostępny   MitycznyJeż 

  • krzem gotuJEŻ, węgiel zdrapuJEŻ
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 19969
  • Dołączył: So, 12 Kwi 14

Napisany 03 Maj 2019 - 13:41

Powinno automatyczne czytać symbole gdy pdb jest obok dll.

Otwórz sobie widok modułów, prawoklik na dll i wybierz ładowanie symboli.

#3 Użytkownik jest niedostępny   Namonaki 

  • Orator
  • PipPipPipPip
  • Grupa: Forumowicze
  • Postów: 719
  • Dołączył: Pt, 24 Sty 14

Napisany 03 Maj 2019 - 13:56

ale debugujesz i kompilujesz w trybie "debug"
nie wiadomo czy masz włączone generowanie symboli

a tak na marginesie to co to za biblioteka? cos open source?

#4 Użytkownik jest niedostępny   Alfer 

  • Małomówny
  • Pip
  • Grupa: Forumowicze
  • Postów: 5
  • Dołączył: Pt, 03 Maj 19

Napisany 03 Maj 2019 - 14:46

Zobacz postMitycznyJeż, o 03 Maj 2019 - 14:41, napisał(a):

Powinno automatyczne czytać symbole gdy pdb jest obok dll.

Otwórz sobie widok modułów, prawoklik na dll i wybierz ładowanie symboli.


Nie wiem co to widok modułów … ale ...

zlokalizowałem pdb i tu sie okazało, że sobie ustawiłem wyjściowy plik na s2.dll a ten wynalazek zrobił z tego s2.dll.dll, s2.dll.pdb, …. zmieniłem, teraz jest s2 i mam s2.dll i s2.pdb no i jest poprawa bo nie czepia się, że symbole niezaładowane, natomiast jakoś do punktu zatrzymania (pierwszy wiersz funkcji nie dochodzi). Ale najpierw zbadam exe'ka jak to tam wygląda. Mam jeszcze wątpliwości np. do tego jak powinienem wyrównywać zmienne.

dzięki za wsparcie … i jak szybko
-alfer

Zobacz postNamonaki, o 03 Maj 2019 - 14:56, napisał(a):

ale debugujesz i kompilujesz w trybie "debug"
nie wiadomo czy masz włączone generowanie symboli

a tak na marginesie to co to za biblioteka? cos open source?


Tak tryb debug.

Biblioteka to dzieło mojego kolegi.

-mh

#5 Użytkownik jest niedostępny   Namonaki 

  • Orator
  • PipPipPipPip
  • Grupa: Forumowicze
  • Postów: 719
  • Dołączył: Pt, 24 Sty 14

Napisany 03 Maj 2019 - 15:00

Zobacz postAlfer, o 03 May 2019 - 14:46, napisał(a):

Nie wiem co to widok modułów … ale ...

zlokalizowałem pdb i tu sie okazało, że sobie ustawiłem wyjściowy plik na s2.dll a ten wynalazek zrobił z tego s2.dll.dll, s2.dll.pdb, …. zmieniłem, teraz jest s2 i mam s2.dll i s2.pdb no i jest poprawa bo nie czepia się, że symbole niezaładowane, natomiast jakoś do punktu zatrzymania (pierwszy wiersz funkcji nie dochodzi). Ale najpierw zbadam exe'ka jak to tam wygląda. Mam jeszcze wątpliwości np. do tego jak powinienem wyrównywać zmienne.

nazwę i rozszerzenie można definiować oddzielnie
pading lepiej zostaw taki jak ustawia kompilator, no chyba że chcesz go się całkowicie pozbyć
"wynalazek"?

#6 Użytkownik jest niedostępny   Alfer 

  • Małomówny
  • Pip
  • Grupa: Forumowicze
  • Postów: 5
  • Dołączył: Pt, 03 Maj 19

Napisany 03 Maj 2019 - 16:24

Dręczę temat dalej

Wyszło mi, że nie eksportuje funkcji ale sprawdzam dumpbin i funkcje są ale mają podkreślenie na początku a zadeklarowane są jak niżej i nie widzę, tam, żadnego podkreślenia w nazwach funkcji. Ja rozumiem, że VS 2017 wie o wiele lepiej niż ja, jak się powinna nazywać moja funkcja, ale bardzo chciałbym się pozbyć tego podkreślenia.

Z góry dziękuję za sugestie
-alfer


extern "C" __declspec (dllexport) void __stdcall evDefExt_Ctrl( void )
{
} ;

// ------------------------------------------------------------------
// Wywolanie procedury 1 (glonej)

extern "C" __declspec (dllexport) void __stdcall evDefExt_Run(
tsDefExt_G const * zcqG ) // Struktura glowna

{

….




Dump of file s2.dll

File Type: DLL

Section contains the following exports for szklo.dll

00000000 characteristics
FFFFFFFF time date stamp
0.00 version
1 ordinal base
2 number of functions
2 number of names

ordinal hint RVA name

1 0 0001128A _evDefExt_Ctrl@0 = @ILT+645(_evDefExt_Ctrl@0)
2 1 00011483 _evDefExt_Run@4 = @ILT+1150(_evDefExt_Run@4)

#7 Użytkownik jest niedostępny   Namonaki 

  • Orator
  • PipPipPipPip
  • Grupa: Forumowicze
  • Postów: 719
  • Dołączył: Pt, 24 Sty 14

Napisany 03 Maj 2019 - 17:01

mój drogi to nie ma nic wspólnego z Visual C++
pewnie jeszcze byś chciał pozbyć się @0 z końca symbolu :P
to jest dekorowanie nazw standardowe dla języka C
jak zobaczysz kiedyś dekoracje nazw dla C++ w GCC lub VC to dopiero się zdziwisz :D


czy w prototypach funkcji używanych w "exe'ku" jest extern "C" i __stdcall (__declspec (dllimport))
Import into an application using __declspec(dllimport)

ignorancja w tym temacie poraża ;)

Create and use your own Dynamic Link Library (C++)
DLL

a w ogóle to linkujesz te funkcje statycznie czy dynamicznie (LoadLibrary)?

tak na marginesie to kolega Ci utrudnił zadanie maksymalnie jak mógł :P

Ten post był edytowany przez Namonaki dnia: 03 Maj 2019 - 18:14


#8 Użytkownik jest niedostępny   Alfer 

  • Małomówny
  • Pip
  • Grupa: Forumowicze
  • Postów: 5
  • Dołączył: Pt, 03 Maj 19

Napisany 03 Maj 2019 - 18:11

Zobacz postNamonaki, o 03 Maj 2019 - 18:01, napisał(a):

mój drogi to nie ma nic wspólnego z Visual C++
pewnie jeszcze byś chciał pozbyć się @0 z końca symbolu :P
to jest dekorowanie nazw standardowe dla języka C
jak zobaczysz kiedyś dekoracje nazw dla C++ w GCC lub VC to dopiero się zdziwisz :D


czy w prototypach funkcji używanych w "exe'ku" jest extern "C" i __stdcall (__declspec (dllimport))
https://docs.microso...rt?view=vs-2019

ignorancja w tym temacie poraża ;)


Ha! Gdyby EXE był w C++ to może i by było tylko, że EXE jest w Delphi … tak żeby było łatwiej.

a tam jest:

LocStr := 'S2.DLL';
FDllHandle := LoadLibrary(PChar(LocStr));
if FDllHandle <> 0 then
begin
@evDefExt_Ctrl := GetProcAddress(FDllHandle, 'evDefExt_Ctrl');
@evDefExt_Run_ := GetProcAddress(FDllHandle, 'evDefExt_Run');
end

zadeklarowane jako:

TevDefExt_Ctrl = procedure; stdcall;
TevDefExt_Run_ = procedure(ADefExt_G_: psDefExt_G); stdcall;


co prawda w Delphi już też zaczynają wprowadzać "dekoracje". "Lepsze jest wrogiem dobrego" ale jak rozumiem wszystko to jest dla mojego dobra.


Zmieniłem na nazwy an te z podkreśleniami i małpami i zadziałało

Ale czy przypadkiem w wersji release coś się nie zmienia?

-alfer

#9 Użytkownik jest niedostępny   Namonaki 

  • Orator
  • PipPipPipPip
  • Grupa: Forumowicze
  • Postów: 719
  • Dołączył: Pt, 24 Sty 14

Napisany 03 Maj 2019 - 19:07

nic nie powiedziałeś że to jest Object Pascal :P

co prawda ostatni raz jak pisałem cos w Delphi jeszcze za czasów rozdawania darmowych licencji Borlanda (po co Oni to sprzedali ?) ale przynajmniej FPC przy definiowaniu unitu pozwala na extern'owanie funkcji z pod dowolnej nazwy

generalnie to da się pozbyć podkreśl-inka za pomocą "Pliku definicji modułu (.Def)" https://docs.microso...es?view=vs-2019
EXPORTS
   _LoadLibrary=LoadLibrary


https://docs.microso...ts?view=vs-2019

ale @ i cyferki po niej są częścią konwencji wywołań stdcall (__stdcall) [nomen omen zwane pascal call] wiec należało by powrócić do cdecl (__cdecl)
na marginesie to Embarcadero rozdaje darmowe licencje uczelniom czy firma płaci są IDE?

Ten post był edytowany przez Namonaki dnia: 03 Maj 2019 - 19:12


#10 Użytkownik jest niedostępny   Alfer 

  • Małomówny
  • Pip
  • Grupa: Forumowicze
  • Postów: 5
  • Dołączył: Pt, 03 Maj 19

Napisany 03 Maj 2019 - 20:54

Zobacz postNamonaki, o 03 Maj 2019 - 20:07, napisał(a):

nic nie powiedziałeś że to jest Object Pascal :P

na marginesie to Embarcadero rozdaje darmowe licencje uczelniom czy firma płaci są IDE?


Jeśli pytanie brzmi "Czy firma płaci za IDE?" to odpowiedź brzmi "Firma płaci jak za zboże".

Nie wiem czy teraz jeszcze tak jest, ale można było pobrać za darmo całe środowisko i robić co się chce nawet komercyjnie byle nie przekroczyć $1000 przychodu z tego tytułu. (Wziąłem to z głowy czyli z niczego).

Czasami jednak mnie obezwładniają. Ostatnio spreparowałem serwer REST, niby działa tylko od czasu do czasu się wysypie … no kurcze takie coś do komercyjnych zastosowań odpada … szkoda, bo to dla nich też kupa roboty, skoro już ludzie za to płacą to mogłoby jednak funkcjonować. I tak teraz myślę, co z tym zrobić? Testy są trudne bo błąd pojawia się raz na dwa tygodnie i nie potrafię go skojarzyć z czymkolwiek.

-alfer

Strona 1 z 1
  • Nie możesz rozpocząć nowego tematu
  • Nie możesz odpowiadać w tym temacie

1 Użytkowników czyta ten temat
0 użytkowników, 1 gości, 0 anonimowych