> On 5 Aug 2015, at 18:19, Alexander Köplinger <alex.koeplin...@outlook.com> 
> wrote:
> 
> You can build the MDK with 
> https://github.com/mono/bockbuild#the-mono-mac-distribution, but I'm not sure 
> if that includes debug symbols (I think it does).
> 
Nice to see that bockbuild now has some usage notes in the readme.
It says:

$ git clone g...@github.com:mono/bockbuild bockbuild
$ cd bockbuild/profiles/mono-mac-release
$ MONO_VERSION=4.9.9 ./mono-mac-release.py --build --arch darwin-32

Not sure if that generates a symbolicated build.


> -- Alex
> 
>> From: jonat...@mugginsoft.com
>> Date: Wed, 5 Aug 2015 18:06:37 +0100
>> To: Mono-devel-list@lists.ximian.com
>> Subject: Re: [Mono-dev] Compiling Mono with debug symbols to diagnose an     
>> issue with embedded Mono 4.0.2.5
>> 
>> 
>>> On 5 Aug 2015, at 02:12, jean-michel.perr...@csiro.au wrote:
>>> 
>>> I am trying to debug C code, mostly to step through the mono runtime itself.
>> I too would like to debug the Mono runtime itself and so would really, 
>> really, really like to able to build an MDK with debug symbols and source 
>> code references.
>> 
>> Why do I need to debug the runtime?
>> I have written an Obj-C > C# bridge utilising the runtime and in some 
>> situations I cannot figure out what the correct embedded API function 
>> signatures are for more complex generic managed methods. Being able to debug 
>> the runtime would give me some insight into what is going on in the method 
>> signature search process.
>> 
>>> That said, I would not at all refuse a howto guide for mixed mode (C and 
>>> C#) debugging on Linux (not possible so far as I know). I may try to give a 
>>> try on Windows with Visual Studio, but as a fallback option as this issue 
>>> may not be reproducible on it anyway.
>> 
>> Here is my take on debugging Mono based on working on OS X.
>> 
>> C
>> ==
>> 
>> On the Obj-C side (Obj-C is a strict superset of C) I should be able to step 
>> into the Mono runtime code via the Xcode side if my Mono runtime build 
>> supported debug symbols and their source code references. I reckon that most 
>> C IDEs should be fit to do the same.
>> 
>> 
>> C#
>> ==
>> 
>> I don’t know of a way to seamlessly debug both C and C# via the same IDE on 
>> OS X (perhaps VS can so this on windows).
>> To debug the managed code in my OS X app I do roughly the following (more 
>> detail follows in the notes below).
>> 
>> 1. Configure the OS X app embedded Mono code to use the Mono soft debugger 
>> (this is a remote capable software debugger that runs over TCP-IP see 
>> http://www.mono-project.com/docs/advanced/runtime/docs/soft-debugger/).
>> 2. Run my OS X outside of my Xcode IDE. If I don’t do this then the signals 
>> generated by the debugee tend to get caught by the IDE debugger rather than 
>> the Mono soft debugger.
>> 3. Fire up Xamarin Studio (XS) on a Windows machine (in my case a Windows VM 
>> on the same physical machine but a networked base PC should work just fine 
>> too).
>> 4. In XS connect to the remote debugger, set breakpoints etc.
>> 5. Exercise the OS X app and trigger breakpoints in XS.
>> 
>> Getting the soft debugger/Xamarin setup correctly can be fiddly but it does 
>> work.
>> It may be possible to debug the managed code by Using Xamarin Studio on OS X 
>> or Linux but in my case (as I was building the Managed code assemblies on 
>> the Windows VM anyway) it was easiest to run XS on Windows.
>> 
>> Debugging Mono Embedded API
>> ===========================
>> 
>> The embedded managed code can be debugged (including breakpoints and single 
>> stepping) using Xamarin Studio.
>> 
>> 1. Config OS X app to attach to Mono soft Debugger.
>> 
>> Xamarin Studio must be running on machine with IP 192.168.1.72 (in this case 
>> my windows VM)
>> [DBManagedEnvironment setRuntimeOptions:@{@"address" : @"192.168.1.72", 
>> @"port" : @"10000", @"loglevel" : @"0"}];
>> 
>> 2. Call DBManagedEnvironment +setRuntimeOptions: with IP address and port of 
>> Windows VM running the Xamarin Studio debugger.
>> 
>> + (void)setRuntimeOptions:(NSDictionary *)options
>> {
>> // NOTE: be sure to call this before -initWithDomainName
>> 
>> // for info on these options see man mono
>> // the debugger can be configured either as a client or a server
>> NSString *address = options[@"address"]?:@"127.0.0.1";
>> NSString *port = options[@"port"]?:@"10000";
>> NSString *server = options[@"server"]?:@"n";
>> NSString *suspend = options[@"suspend"]?:@"y";
>> NSString *loglevel = options[@"loglevel"]?:@"1";
>> NSString *timeout = options[@"timeout"]?:@"10";
>> 
>> NSString *agent = [NSString 
>> stringWithFormat:@"--debugger-agent=transport=dt_socket,address=%@:%@,server=%@,suspend=%@,loglevel=%@,timeout=%@",
>>  address, port, server, suspend, loglevel,timeout];
>> const char* jit_options[] = {
>> "--soft-breakpoints",
>> [agent UTF8String]
>> };
>> 
>> mono_jit_parse_options(2, (char**)jit_options);
>> 
>> mono_debug_init(MONO_DEBUG_FORMAT_MONO);
>> }
>> 
>> see 
>> https://github.com/ThesaurusSoftware/Dubrovnik/blob/master/Framework/XCode/DBManagedEnvironment.m#L167
>> 
>> 
>> 3. Run app outside of Xcode. The app will pause if the remote debugger is 
>> not responding.
>> 4. Run Xamarin Studio (preconfigure env var to enable the soft debug menu if 
>> it is not visible) on the VM and load the solution being debugged on OS X.
>> 5. Set start up project as appropriate (May be better to have a dummy exe 
>> project rather than rebuild this all the time).
>> 6. Select Run - Run with - Custom command Mono soft debugger.
>> 7. Enter IP address and port.
>> 8. Click Listen.
>> 9. Set breakpoints as normal.
>> 
>> Notes on Use of the Mono Soft Debugger
>> ======================================
>> 
>> See http://www.jeffongames.com/2012/03/debugging-embedded-mono/
>> http://mono.1490590.n4.nabble.com/remote-debugging-a-hello-world-application-td4591791.html
>> 
>> The debugee should connect to the debugger on the configured listener IP and 
>> port.
>> The Windows firewall will need to allow the incoming connection.
>> To check if the connection is up and running;
>> 
>> // manual check if connection to debugger listener can be established
>> teqlnet 192.168.1.72 10000
>> 
>> // check state of established network connections 
>> netstat -n -f inet
>> 
>> For the soft debugger signal handler to work correctly the app must be 
>> executed outside of Xcode.
>> Other signal handlers, such as those installed by HockeyApp, must be 
>> disabled while the soft debugger is in use.
>> Remember to use a debug build of the managed code!
>> 
>> http://www.mono-project.com/docs/advanced/runtime/docs/soft-debugger/
>> 
>> HTH
>> 
>> Jonathan
>> _______________________________________________
>> Mono-devel-list mailing list
>> Mono-devel-list@lists.ximian.com
>> http://lists.ximian.com/mailman/listinfo/mono-devel-list
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list@lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list













_______________________________________________
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

Reply via email to