[Vm-dev] Debugging Pharo-Headless-Linux-VM using Visual Studio running on Windows

Ben Coman btc at openinworld.com
Thu Aug 29 02:51:30 UTC 2019


Yes. I plan to later.  I just didn't have the energy to do pictures/video
and fight Wordpress right now,
and I'll see if there are issues anyone runs into that I can capture.

cheers -ben

On Thu, 29 Aug 2019 at 06:44, Nicolas Cellier <
nicolas.cellier.aka.nice at gmail.com> wrote:

>
> This would make be a great blog post!
>
> Le mer. 28 août 2019 à 15:37, Ben Coman <btc at openinworld.com> a écrit :
>
>>
>>
>> Guille's procrastination experiments inspired me to procrastination of my
>> own,
>> with an experiment around debugging Pharo-Headless-Linux-VM using Visual
>> Studio running on Windows.
>> I've refined the steps-from-scratch to reproduce down to the following...
>>
>> Overview...
>> 1. Install Windows Subsystem from Linux
>> 2. Install Visual Studio 2019
>> 3. Build and run hello-world exercise inside WSL
>> 4. Build and run Pharo-Headless-VM inside WSL
>>
>> Now lets get started...
>>
>> ###############################
>> Install Windows Subsystem from Linux
>> ###############################
>> 1A. On a Windows 10 box, go to the Windows App Store and Ubuntu 18.04...
>>
>> Ref: https://docs.microsoft.com/en-us/windows/wsl/install-win10
>>
>>
>> 1B. Ensure this configured as the default (otherwise later the
>> $defaultWSLPath variable doesn't work and you may see a Visual Studio error
>> "Could not open windows subsystem shell")...
>>
>>   C:\Users\Ben>wslconfig /l
>>   Windows Subsystem for Linux Distributions:
>>   Legacy (Default)
>>   kali-linux
>>   Ubuntu-18.04
>>   Ubuntu-16.04
>>
>>   C:\Users\Ben>wslconfig /setdefault Ubuntu-18.04
>>
>>   C:\Users\Ben>wslconfig /l
>>   Windows Subsystem for Linux Distributions:
>>   Ubuntu-18.04 (Default)
>>   Legacy
>>   kali-linux
>>   Ubuntu-16.04
>>
>> Ref:
>> https://www.howtogeek.com/344688/how-to-set-your-default-linux-distribution-on-windows-10/
>>
>> btw, my Windows 10 box recently upgrade to latest version.
>> C:\Users\Ben> ver
>> Microsoft Windows [Version 10.0.18362.295]
>>
>>
>> 1C. Start Ubuntu-18.04, then update/upgrade/install pre-requisites...
>> ```
>> sudo apt-get update
>> sudo apt-get upgrade
>> sudo apt-get install clang gcc gdb make rsync zip        # Visual Studio
>> requirement
>> sudo apt-get install uuid-dev                      # Pharo VM build
>> requirement
>> ```
>>
>> While that is running...
>>
>> ####################
>> Install Visual Studio 2019
>> ####################
>> 2A. Download and run the installer for Visual Studio Community 2019 (not
>> Visual Studio Code)
>>
>> Ref: https://visualstudio.microsoft.com/free-developer-offers/
>>
>>
>> 2B. When the "Visual Studio Installer" opens, under its "Workloads" tab,
>> select "Linux development with C++" and click **Install**.
>>
>> Ref:
>> https://docs.microsoft.com/en-us/cpp/linux/download-install-and-setup-the-linux-development-workload?view=vs-2019
>>
>>
>> #####################################
>> Build and run hello-world exercise inside WSL
>> #####################################
>> 3A. Start Visual Studio 2019
>> and at its opening window, under "Get started" click "Create a new
>> project".
>> Then scroll down and choose "CMake Project" and <Next>.
>> and configure...
>>   Project name: hello-world
>> then click <Create>.
>>
>> Ref:
>> https://docs.microsoft.com/en-us/cpp/linux/cmake-linux-project?view=vs-2019
>>
>> Now it may immediately start the CMake build and get an error because its
>> using the default "x64-Debug" configuration.
>> Ignore that, we will create a new configuration to build on Windows
>> Subsystem for Linux.
>>
>>
>> 3B. From the "Configuration drop-down" (where you see "x64-Debug")
>> select "Manage Configurations..."
>> Delete "x64-Debug".
>> Add... "WSL-Debug" and use all defaults then press <CTRL-S> to save.
>>
>> Inside WSL, Cmake will start generating the makefiles.
>>
>> At some point you might see "Supported CMake version is not present on
>> WSL. Install CMake binaries built by Microsoft?"
>> YES, do that.
>>
>>
>> 3C. After "CMake generation finished",
>> pull down "Select Startup Item" and select "hello-world"
>> then press the green PLAY button.
>>
>> Inside WSL, the make build will start and after its done the pharo
>> executable will run there.
>> In the [Output] tab, it was successful if you see  "The thread
>> 'hello-world' (0x1f7a) has exited with code 0" .
>>
>>
>> 3D. For proof that its running inside WSL, lets write a file!
>> In the "Solution Explorer" tab, browse to "hello-world.cpp" and change
>> its contents to...
>> ```
>> #include <stdio.h>
>> int main()
>> {
>>     FILE* fp;
>>     int i;
>>     /* open the file for writing*/
>>     fp = fopen("/tmp/built-by-visual-studio", "w");
>>     fprintf(fp, "It worked.\n");
>>     fclose(fp);
>>     return 0;
>> }
>> ```
>> then press the green PLAY button.
>> After you see "thread 'hello-world' has exited with code 0"
>> open a WSL shell and run...
>> $ cat /tmp/built-by-visual-studio
>> It worked
>>
>>
>> 3E. To experience debugging Linux from Visual Studio, first remove the
>> test file...
>> $ rm /tmp/built-by-visual-studio
>> then put a breakpoint on "fopen" and click the PLAY button.
>> Check if the file is there...
>> $ cat /tmp/built-by-visual-studio
>> cat: /tmp/built-by-visual-studio: No such file or directory
>> <STEP OVER> fopen
>> $ cat /tmp/built-by-visual-studio
>> <STEP OVER> fprintf
>> $ cat /tmp/built-by-visual-studio
>> <STEP OVER> fclose
>> $ cat /tmp/built-by-visual-studio
>> It worked
>>
>> 3F. All done...
>> File > Close Folder
>>
>>
>> #####################################
>> Build and run Pharo-Headless-VM inside WSL
>> #####################################
>> 4A. From Visual Studio 2019 opening window, under "Get started" click
>> "Clone or check out code"
>>   Repository location: https://github.com/bencoman/opensmalltalk-vm.git
>> then click <Clone>.
>>
>> https://docs.microsoft.com/en-us/visualstudio/get-started/tutorial-open-project-from-repo?view=vs-2019
>>
>>
>> 4B. In the bottom-right status bar, click the "branching" icon and choose
>> "Manage Branches".
>> Expand "remotes/origin",
>> then right-click "headless-WSL-VisualStudio" and "Checkout"
>>
>> A fixed "WSL-Debug" configuration is a part of this branch, so its
>> CMake-build should auto-start and complete successfully.
>>
>>
>> 4C. After "CMake generation finished",
>> pull down "Select Startup Item" and select "pharo (build/vm/pharo)"
>> then press the green PLAY button.
>>
>> Don't worry if it sits for a long time on
>> "BalloonEnginePlugin>>primitiveAddRect"
>>
>> The [Error List] tab pops up with 116 Warnings.
>> Switching back to the [Output] tab, you hopefully see "thread 'pharo'
>> (0x4d0d) has exited with code 0"
>>
>> So the VM just built and ran headless under Windows Subsystem for Linux.
>>
>> Now lets debug that from Visual Studio.
>>
>>
>> 4D. Browse to src/main.c and put a breakpoint in main() on the call to
>> parseArguments()
>> Then click the PLAY button.
>> Once stopped at the breakpoint, <STEP INTO>.
>> In the [Autos] tab, expand the "parameters" variable.  Observe
>> "imageFile" is empty.
>> Notice "imageFile" becomes "Pharo.image" after <STEP OVER>
>> splitVMAndImageParameters().
>>
>> So now I leave you to play.  I'd be interested in hearing about people's
>> experiences.
>>
>> Placing the correct PharoHeadless.image in the right place to actually
>> run the image
>> is left as an exercise for the reader.
>>
>>
>> cheers -ben
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20190829/e6789779/attachment-0001.html>


More information about the Vm-dev mailing list