Невозможно использовать Mono Soft Debugger Remote Debugging, потому что ошибка «отладчик-агент: сбой квитирования DWP» - PullRequest
2 голосов
/ 13 сентября 2010

Я встроил моно в свое приложение.Приложение представляет собой консольное приложение, которое поддерживает плагины.Плагины - это сборки .NET.Все отлично работает, но я хочу их отладить.Чтобы включить отладку в моем C-коде, у меня есть:

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();

...

Приведенный выше код запускает моно среду выполнения, и это все, что я сделал, чтобы включить отладку.Чтобы включить отладку на стороне MonoDevelop, я создал надстройку и реализовал необходимые классы.Тот, который начинает отладку, является производным от RemoteSoftDebuggerSession.Вот мой метод 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);
}

Проблема заключается в том, что, когда я начинаю отладку, myapp печатает «отладчик-агент: сбой квитирования DWP» и отладка заканчивается.Все, что я мог выяснить, это то, что ровно 13 байтов отправлено myapp.exe и получено 13 байтов (количество символов в «DWP-рукопожатии»).

1 Ответ

0 голосов
/ 16 сентября 2010

Проблема решена. Проблема была в методе VirtualMachineManager.ListenInternal (2) в следующих строках:

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

По какой-то причине это было необработанное исключение (при отключении) здесь. try-catch решил проблему. Теперь все отлично работает!

...