Wiem, że inni ludzie napisali podobne pytania, ale myślę, że mój jest inny przypadek, ponieważ nie mogłem znaleźć żadnego rozwiązania.Tajemnicze wywołanie jest dodawane, gdy odwołanie jest przypisane w C#
mam zadanie obiektu, coś bardzo prosty tak:
_buffer3 = buffer; //they are just simple reference types
kod montaż generowany jest następujący
mov edx,dword ptr [ebp-3Ch]
mov eax,dword ptr [ebp-40h]
lea edx,[edx+4]
call 69C322F0
teraz, tylko zrozumieć, co się dzieje, chciałem wejdź do środka połączenia (dlaczego połączenie powinno być używane w zadaniu?). Jednak kod pod tym adresem nie istnieje i nie mogę wkroczyć jeśli wpisz adres w polu kod adresu, to co jest pokazane.
69C322F0 ???
Każda pomoc stara się rozwiązać ten Mistery? :)
Edycja. Najwyraźniej tajemnicze wywołanie jest dodawane, gdy odwołanie jest przypisane wewnątrz metody klasy.
Jeśli mam tej klasy:
private class Test
{
int _X;
int _Y;
Test _t;
public void SetValues(int x, int y, Test t)
{
_X = x;
_Y = y;
}
}
zespół wygenerowany dla SetValues metoda jest:
_X = x;
00000028 mov eax,dword ptr [ebp-3Ch]
0000002b mov edx,dword ptr [ebp-40h]
0000002e mov dword ptr [eax+8],edx
_Y = y;
00000031 mov eax,dword ptr [ebp-3Ch]
00000034 mov edx,dword ptr [ebp+0Ch]
00000037 mov dword ptr [eax+0Ch],edx
co ma sens
jednak jeśli piszę ten
private class Test
{
int _X;
int _Y;
Test _t;
public void SetValues(int x, int y, Test t)
{
_X = x;
_Y = y;
_t = t;
}
}
the tajemnicze wezwanie pojawia
_X = x;
00000028 mov eax,dword ptr [ebp-3Ch]
0000002b mov edx,dword ptr [ebp-40h]
0000002e mov dword ptr [eax+8],edx
_Y = y;
00000031 mov eax,dword ptr [ebp-3Ch]
00000034 mov edx,dword ptr [ebp+0Ch]
00000037 mov dword ptr [eax+0Ch],edx
_t = t;
0000003a mov edx,dword ptr [ebp-3Ch]
0000003d mov eax,dword ptr [ebp+8]
00000040 lea edx,[edx+4]
00000043 call 515E2E48
IMHO jest to coś związane z Garbage Collection, ale nie mogę zrozumieć, co to jest, a ja naprawdę chciałbym zrozumieć. Wiem, że ktoś z was musi wiedzieć :)
aneks do odpowiedzi, to jest wyciąg Wziąłem od Google Books CLR książki poprzez C#:
hmm nie, faktycznie to wyłączyłem celowo. Spróbuję tego! – sebas
@AlexD, czy zaznaczyłeś opcję "Włącz debugowanie kodu niezarządzanego" we właściwościach projektu (karta Debugowanie)? –
Może być duplikatem [tego pytania] (http://stackoverflow.com/questions/57840/how-to-attach-debugger-to-step-into-native-c-code-from-a-managed-c -wrappe) –