Se hai le bandiere rosse di debug di Wine sul tuo sistema, questo lead utente dovrebbe aiutarti a risolverle.

 

 

a partire dal

Traduzione di questa pagina: porta non solo in esecuzione. Traduttore, vedere Documento di discussione.

WINEDEBUG è una variabile di ambiente del fatto che gli esperti dicono anche abilita e ostacola i messaggi di debug.

Sintassi

 WINEDEBUG = [classe] [+/-] canale [, [classe2] [+/-] canale2]

La classe

è facoltativamente disponibile e può essere una delle seguenti opzioni particolari: traccia, avviso, errore affidabile o correzione. Sono come i meno classificati dal più rigoroso al più rigoroso. follow può essere utilizzato per i percorsi di codice che lo hanno in stock come parte di un programma puramente naturale. warning viene solitamente utilizzato verso percorsi che possono causare errori ma sfortunatamente possono essere gestiti facilmente da un componente di livello superiore. err sicuramente è che utilizza percorsi di codice che sicuramente porteranno a errori. Fixme viene utilizzato per percorsi di codice in cui non è implementato in Wine. Basta fare un errore per impostazione predefinita e fixme è attivo. Se viene specificato un modo senza una classe, sono incluse quasi le tue classi.

Ogni canale viene utilizzato per stampare la comunicazione su uno specifico prodotto vinicolo. I seguenti elementi possono essere personalizzati no + o forse a – per attivare o disattivare effettivamente il canale specificato. Se c’è poco o nessun angolo della classe davanti, l’intestazione fuori + può essere omessa. L’annotazione dello spazio non è consentita se l’aggiunta lo è.

wine debug flags

Una sanguisuga che identifica direttamente il canale di debug da abilitare o disabilitare. Per vedere un importante elenco completo di canali, visualizzalo quindi utilizzando il comando locate directory:

flag di debug del vino

 grep -3rd thererrrs r --include = '*. c '--include =' *. h '' WINE _  (DEFAULT  | DECLARE ) _ DEBUG_CHANNEL 'dll/programmi/

E per aggiungere ancora più lavoro, ora abbiamo una gamma ordinata e formattata in BASH (puoi cambiare ogni numero 26 alla fine della maggior parte di questa importante composizione per soddisfare i gusti delle fossette sulla guancia della tua azienda):

 per mod make in $ (trova dll / programmi di formazione / -mindepth some person -type l sort); | fare  echo (grep -rE --include = '*. [ch]' '^ WINE_ (DEFAULT | DECLARE) _DEBUG_CHANNEL' $ mod_name n        | awk -F "[()]" 'stampa $ 2' | selezione | solo) n        | awk -v nome_mod = rr nome_mod 'if (NF> 0) printf ("% - ( spazio ) s% s  n", 28, nome_mod ":", $ 0)';fatto

Esempi

WINEDEBUG = avvertimento severo a + tutti
si riferisce ai comunicati WARN per tutti i canali diversi dai messaggi ERR già abilitati, così come i messaggi FIXME.
WINEDEBUG è uguale a fixme-all, avverti + cursore, + informa
disabilita tutto dalla comunicazione FIXME, include le istruzioni Cursor WARN (oltre a FIXME ERR con i messaggi) e include ogni singolo messaggio di scambio (chiamate API).
WINEDEBUG = + relè
include tutti i trasferimenti di messaggi. Per un controllo maggiore rispetto all’abilitazione o esclusione di funzioni e DLL, controlla la traccia del relè attualmente nella chiave di registro [HKCU Software Wine Debug] (vedi Chiavi di registro utili e un esempio di seguito).
WINEDEBUG = -d3d
d3d ostacola tutti i messaggi e disabilita anche il controllo del salto GL dopo le operazioni. Questo forse può migliorare le prestazioni.

Canali utili

  • + all : documenta tutto, nella maggior parte dei casi probabilmente fornisce così tante informazioni, può essere utile per risolvere problemi sottili.
  • + heap: traccia tutte le emorroidi di attività nel programma, quindi abilita controlli di coerenza assolutamente coerenti. Se la tua applicazione di solito pulisce l’heap effettivo, puoi usare + exchange, + heap tracing per restringere il campo in cui ciò accade. Se viene rilevata un’ampia incoerenza, Wine svuota i contenuti dell’heap per terminare il programma. Mentre molti aspetti porteranno a perdite, la maggior parte dei comuniUn overflow del buffer interno si verifica a causa di Wine. Ricorda di ricordare questo canale di situazione; La modalità All Wine utilizza le API HeapAlloc / HeapFree, quindi una delle ragioni principali è che l’heap integrato di Wine è davvero utile ai fini del debug. Tieni presente che Can + heap può rallentare molto il programma sotto controllo o creare file di registro molto pesanti. Se sei preoccupato del fatto che Wine possa potenzialmente danneggiare il lotto, ma non sei sicuro, questi avvisi + heap attiveranno la protezione heap, ma non tiene traccia di ogni condivisione ed è gratuito.
  • + loaddll : riporta ogni asso ricco come una DLL.
  • + message : registra tutti i messaggi forniti attraverso la porta dell’occhio a quella route della finestra, simile a + pass on. Usa msg per tenere traccia di tutte le API di messaggistica online.
  • + msgbox : area tematica dei log di tutte le chiamate a MessageBox(). Molti programmi di formazione visualizzano informazioni sugli arresti anomali utilizzando MessageBox(), che può essere un modo semplice per raccogliere queste informazioni in un modulo utilizzabile.
  • + pid: prefissa ogni riga insieme all’output di debug con un identificatore confrontabile con il processo che viene generato. Questo può essere utile a che ora eseguire il debug di applicazioni multiprocessore.
  • + relay : registra ogni chiamata che ha impiegato più tempo del limite DLL del modulo di template Web Wine, incluse le chiamate tra le DLL (non native). Canale Questa è di solito la prima tappa in cui non capisci mai cosa c’è che non va. Ti espone ogni chiamata e output di tutti i moduli Wine all’interno di una DLL. Se sei sovraccarico di determinate capacità, controlla la creazione delle linee RelayInclude e RelayExclude che puoi trovare nel Registro Wine (sotto [HKCU Software Wine Debug]). Nota che questa catena è meravigliosa, già piena di funzioni che molti vengono regolarmente chiamate, ma di solito tendono a fornire qualsiasi indizio sul motivo principale per cui la scuola sta fallendo. Non avrai mai bisogno di + Relay o + Snoop contenenti DLL native! Questo mostrerà alle famiglie l’implementazione con queste DLL, il che a sua volta significa che qualsiasi codice messo insieme per implementare i consumatori violerà tutte le mie linee guida per il reverse engineering della camera bianca. Protocolli
  • + seh : condizioni di Windows (gestione strutturata delle eccezioni). In genere vengono invocati sia quando è sorprendentemente buono. La sua applicazione sta eseguendo un intervento chirurgico illegale (cioè, l’operazione fallisce), potenzialmente quando il programma if lo copre in realtà sono le proprie eccezioni. Converte Wine UNIX significa in eccezioni SEH e restituisce questi animali attraverso questa pipe. Ciò sarà decisamente utile poiché le applicazioni spesso impongono i propri dump di arresto anomalo uno dopo l’altro per accedere all’istanza corrente. Le eccezioni più comuni a cui prestare attenzione sono STATUS_ACCESS_VIOLATION e di conseguenza 0xC0000005, che è l’attività più vicina a un errore di segmentazione in Win32. Puoi anche vedere i codici che sembrano non essere nelle intestazioni; Si tratta in genere di eccezioni specifiche della lingua che non verrebbero utilizzate da alcun compilatore precedentemente posseduto per EXE. Ad esempio, 0xEEDFADE è il codice per creare un’eccezione Delphi disponibile, o 0xE06D7363 è un’eccezione Microsoft Visual C ++ a questa regola, che ha un meraviglioso rapporto qualità-prezzo (info [0]) 0x19930520, e questo è facile da considerare puramente perché sembra un appuntamento (e, probabilmente, anche). Se gli utenti vedono tutte queste eccezioni, questo metodo potrebbe significare che il termine API Win32 ha restituito un codice diverso da zero da qualche parte utilizzando terminazioni.
  • + server : Visualizza tutti gli RPC Wineserver. Di solito non avrai mai bisogno di questa lattina, ma può essere utile nel caso in cui si risolvano i problemi di Wineserver.
  • + snoop : solo la funzione dei registri finisce per chiamare tra DLL native. Questo è simile in molti modi al modo in cui Aber + Relay viene impiegato tra due DLL native, sebbene questa pipe di guida fornisca meno informazioni perché questi particolari parametri non vengono comunicati. + spy può anche danneggiare o destabilizzare il nostro dispositivo poiché controlla le batterie elettriche e analizza anche il party Prolog per indovinare parametri aggiuntivi. Non iniziare mai con + Relay e + Snoop insieme alle tue DLL! Ti istruisce anche sull’implementazione di tutte le DLL, il che significa che qualsiasi codice che scrivi per implementarle viola le migliori linee guida di reverse engineering della camera bianca.
  • + sincrono: attiva X11 in modo sincrono
  • + timestamp: Prefissa quasi ogni output di debug con la linea effettiva con qualsiasi timestamp se la tua linea è stata eseguita. Questo dovrebbe essere un inestimabile problema di prestazioni di debug.
  • + fps: Inserisci un numero di fotogrammi al secondoundu trovato nel terminale per i servizi OpenGL o d3d, Vulkan.

Altri suggerimenti per il debug

  • Se lo splendido programma visualizza il modulo del messaggio quindi non funziona, non conosci la lingua che ha causato l’errore, prova relay, msgbox trace. Quindi apri il record di debug nel tuo editore o visualizzatore di testo preferito (meno buono) e cerca per produrre la traccia: msgbox. Rivedere le informazioni e i fatti di inoltro prima di chiamare l’API MessageBox, anche se il problema potrebbe non essere dovuto alla chiamata che si è verificata esattamente prima dell’errore. Fai attenzione alla comprensione dettagliata di non avere chiamate API e ricorda che spesso le API di Windows sono minimamente coerenti per visitare il tuo blog il valore esatto della tua politica. Hai solo bisogno di usare che scoprirà cosa utilizza ogni API. Mentre molti altri restituiscono questa penalità e zero in caso di fallimento, un paio di usano la convenzione opposta; A
  • Se il programma non è in grado di avviarsi senza fornire un motivo, la persona può utilizzare una traccia grande + punto. Inoltre, se il tuo programma sembra che tu voglia bloccarsi al di fuori di un’eccellente chiamata API, puoi [Disassembly Disassembly] per visitarlo quando l’applicazione accede ad alcuni parametri passati come punto di montaggio (ad esempio, Keeper’s Dungeon si arresterà in modo anomalo se esegui it anche senza il percorso assolutamente corretto in argv [0]).

+ Rendi il relè meno dettagliato

Se stai cercando un problema che sembra verificarsi dopo alcuni minuti di Tracphone mentre il software è in esecuzione, + inform potrebbe essere eccessivamente dettagliato. In questo caso, eseguilo una volta insieme e poi invia il registro tramite il programma perfetto come

 # Lascia perdere velocemente grepLINGUA = DO# Trova le chiamate migliorifreq = `grep ten': Ret haya | sed 's /(.*//; ings /.* //' | style | uniq -3 | sort -n | hinder | awk 'print $ 2' | tr ';' 'Chat ' 012'> quiet.reg << _EOFREGEDIT4[HKEY_CURRENT_USER  Software  Wine  Debug]"RelayExclude" = "ntdll.RtlEnterCriticalSection; ntdll.RtlTryEnterCriticalSection; ntdll.RtlLeaveCriticalSection; kernel32.48; kernel32.49; kernel32.94; kernel32.95; kernel32.96Tls32.96el32.973297. SetrrrstError; "_EOFRegedit quiet.reg vino

Questo comanda a Wine di non registrare le 10 chiamate frequenti alla tua applicazione, quelle dovrebbero rendere il tuo registro di inoltro molto più gestibile.

Vedi anche

  • Variabili d'ambiente: WINEDEBUG - Capitolo Manuale Utente Wine
  • Record WineAPI - i canali di debug utilizzati, sono probabilmente elencati come per ogni singola funzionalità.