2010-09-13 5 views
2

J'ai intégré le mode mono dans mon application. L'application est une application de console qui prend en charge les plug-ins. Les plug-ins sont des assemblys .NET. Tout fonctionne bien, mais je veux les déboguer. Pour activer le débogage dans mon code C-i have:Impossible d'utiliser le débogage à distance du débogueur Mono Soft car l'erreur 'débogueur-agent: Échec de l'établissement de liaison DWP'

mono_set_dirs (ASSEMBLIES_DIR_NAME, ASSEMBLIES_DIR_NAME); 
assembly_add_to_bundle(API_ASSEMBLY); 

soft_debug = getenv("MYAPP_SOFT_DEBUG"); 
if (soft_debug != NULL) { 
    char *options; 
    options = malloc(17 + strlen(soft_debug)); 
    sprintf(options, "--debugger-agent=%s", soft_debug); 

    mono_jit_parse_options (1, &options); 
    free (options); 

    mono_debug_init (MONO_DEBUG_FORMAT_MONO); 
} 

domain = JIT_INIT(); 

... 

Le code ci-dessus INIT runtime mono et il est tout ce que je l'ai fait pour activer le débogage. Pour activer le débogage côté MonoDevelop, j'ai créé un complément et implémenté les classes nécessaires. Celui qui commence le débogage est dérivé de RemoteSoftDebuggerSession. Voici ma méthode OnRun:

protected override void OnRun (DebuggerStartInfo startInfo) 
{ 
    var dsi = (MyAppDebuggerStartInfo) startInfo; 
    var procStartInfo = new ProcessStartInfo(@"C:\MyApp\myapp.exe") {     
    UseShellExecute = false, 
    RedirectStandardOutput = true, 
    RedirectStandardError = true, 
    WorkingDirectory = @"C:\MyApp", 
    Arguments = dsi.AppName 
    }; 

    procStartInfo.EnvironmentVariables.Add("MYAPP_SOFT_DEBUG",      
     String.Format("transport=dt_socket,address={0}:{1}", 
     dsi.Address, dsi.DebugPort)); 

    this._myapp = Process.Start(procStartInfo); 
    this._runner.EnableRaisingEvents = true; 
    base.ConnectOutput(this._runner.StandardOutput, false); 
    base.ConnectOutput(this._runner.StandardError, true); 

    this._runner.Exited += delegate { this.EndSession(); }; 
    base.StartListening(dsi); 
} 

Le problème est quand je commence le débogage imprime myapp « débogueur-agent: poignée de main DWP a échoué » et se termine le débogage. Tout ce que j'ai pu comprendre c'est que 13 octets exactement sont envoyés à myapp.exe et 13 octets sont reçus (le nombre de caractères dans "DWP-Handshake").

Tout le monde connaît ce problème?

Répondre

0

Le problème est résolu. Le problème était VirtualMachineManager.ListenInternal (2) Méthode dans ce sens:

dbg_sock.Disconnect (false); 
dbg_sock.Close(); 

Pour une raison quelconque, il était exception non gérée (sur Déconnecter) ici. try-catch a résolu le problème. Maintenant tout fonctionne bien!

Questions connexes