So che altre persone hanno scritto domande simili, ma penso che il mio sia un caso diverso, poiché non sono riuscito a trovare alcuna soluzione.La chiamata misteriosa viene aggiunta quando viene assegnato un riferimento in C#
Ho un incarico oggetto, qualcosa di molto semplice come questo:
_buffer3 = buffer; //they are just simple reference types
il codice assembly generato è il seguente
mov edx,dword ptr [ebp-3Ch]
mov eax,dword ptr [ebp-40h]
lea edx,[edx+4]
call 69C322F0
ora, solo per capire cosa sta succedendo, ho voluto passo all'interno della chiamata (perché una chiamata dovrebbe essere utilizzata in un incarico?). Tuttavia il codice a quell'indirizzo non esiste e non può fare un passo in se digito l'indirizzo nel campo indirizzo, questo è ciò che viene mostrato:.
69C322F0 ???
Qualsiasi aiuto cercando di risolvere questo mistero? :)
Modifica..apparentemente la chiamata misteriosa viene aggiunta quando un riferimento viene assegnato all'interno di un metodo di una classe.
Se ho questa classe:
private class Test
{
int _X;
int _Y;
Test _t;
public void SetValues(int x, int y, Test t)
{
_X = x;
_Y = y;
}
}
dell'assieme generato per i SetValues metodo è:
_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
che ha senso
se sto scrivendo questo
private class Test
{
int _X;
int _Y;
Test _t;
public void SetValues(int x, int y, Test t)
{
_X = x;
_Y = y;
_t = t;
}
}
il chiamata misteriosa appare
_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 è qualcosa legato alla raccolta dei rifiuti, ma non riesco a capire di cosa si tratta e mi piacerebbe capirlo. So che qualcuno di voi deve sapere :)
Addendum alla risposta, questo è un estratto ho preso da Google Libri del libro CLR via C#:
hmm no, l'ho effettivamente disabilitato di proposito. Lo proverò! – sebas
@AlexD, hai selezionato "Abilita debug del codice non gestito" nelle proprietà del progetto (scheda Debug)? –
Potrebbe essere un duplicato di [questa domanda] (http://stackoverflow.com/questions/57840/how-to-attach-debugger-to-step-into-native-c-code-from-a-managed-c -wrappe) –