Come posso impostare un punto di interruzione dei dati nel debug misto (C # / C ++)?
-
04-07-2019 - |
Domanda
Lancio il mio programma in C #, che quindi chiama alcuni C ++ non gestiti.
Quando interrompo una riga nel C ++ non gestito, la voce di menu "Nuovo punto di interruzione dati" viene disattivata.
C'è comunque qualcosa attorno a questo?
Soluzione
Per impostare un breakpoint di dati nella parte nativa di un processo in modalità mista, consultare la risposta inviata da jyoung .
Visual Studio disabilita i punti di interruzione dei dati quando si esegue altro che codice nativo puro. Vedi this pubblica una spiegazione parziale del perché da un Program Manager VS.
Altri suggerimenti
Quindi per fare questo ho dovuto:
- imposta la DLL non gestita come progetto di avvio
- imposta il programma gestito come comando di avvio
- imposta la modalità debug come Native
- " interruzione esecuzione " o colpisci un punto di interruzione in modo da trovarti nel " debugging " Stato
yech
La soluzione suggerita non funziona sempre. Anche quando si esegue il debug in modalità nativa, con il programma interrotto in codice nativo, quando si tenta di impostare un "Nuovo punto di interruzione dati", viene visualizzato un popup "Il punto di interruzione non può essere impostato. I punti di interruzione dei dati non sono supportati in Common Language Runtime "
L'alternativa è aggiungere direttamente punti di interruzione di dati dal codice. Vedi l'articolo qui .
Funziona bene in modalità mista, richiede solo la modalità di debug nativa per essere attiva (come suggerito sopra)
Un trucco molto utile che funziona ovunque è chiamare i breakpoint dal codice in condizioni speciali:
If (Condition)
System.Diagnostics.Debugger.Break()