74 lines
2.8 KiB
Markdown
74 lines
2.8 KiB
Markdown
Debugging
|
|
=========
|
|
|
|
VS Code
|
|
=======
|
|
|
|
[Experimental .NET Core Debugging in VS Code][core-debug] enables
|
|
cross-platform debugging with the [Visual Studio Code][vscode] editor.
|
|
This is made possible by the [OmniSharp][] extension for VS Code.
|
|
|
|
Please review their [detailed instructions][vscclrdebugger]. In
|
|
addition to being able to build PowerShell, you need:
|
|
|
|
- C# Extension for VS Code installed
|
|
- `powershell` executable in your path (self-host if not on Windows)
|
|
|
|
The committed `.vscode` folder in the root of this repository contains
|
|
the `launch.json` and `tasks.json` files which provide Core PowerShell
|
|
debugging configurations and a build task.
|
|
|
|
The "build" task will run `Start-PSBuild`.
|
|
|
|
The ".NET Core Launch" configuration will build and start a
|
|
`powershell` process, with `justMyCode` disabled, and `stopAtEntry`
|
|
enabled. The debugger is highly experimental, so if it does not break
|
|
at `Main`, try again.
|
|
|
|
Note that the debugger does not yet provide `stdin` handles, so once
|
|
`ReadKey` is called in the `ReadLine` loop, `System.Console` will
|
|
throw exceptions. The options around this are 1) provide
|
|
`[ "-c", "... ; exit" ]` to the "Launch" configuration's `args` so
|
|
that the `ReadLine` listener is never called, 2) ignore the exceptions
|
|
and only debug code before the listener, or 3) use the "Attach"
|
|
configuration.
|
|
|
|
The ".NET Core Attach" configuration will start listening for a
|
|
process named `powershell`, and will attach to it. If you need more
|
|
fine grained control, replace `processName` with `processId` and
|
|
provide a PID. (Please be careful not to commit such a change).
|
|
|
|
Important Note
|
|
--------------
|
|
|
|
Debugging is very sensitive to the versions of our .NET Core packages, VS Code,
|
|
and the C# extension.
|
|
|
|
- Use the VS Code [Insiders][] build
|
|
- Use the latest pre-release of the [C# extension][]
|
|
- Refer to the pre-release [documentation][]
|
|
|
|
[core-debug]: https://blogs.msdn.microsoft.com/visualstudioalm/2016/03/10/experimental-net-core-debugging-in-vs-code/
|
|
[vscode]: https://code.visualstudio.com/
|
|
[OmniSharp]: https://github.com/OmniSharp/omnisharp-vscode
|
|
[vscclrdebugger]: http://aka.ms/vscclrdebugger
|
|
[insiders]: https://code.visualstudio.com/insiders
|
|
[C# extension]: https://github.com/OmniSharp/omnisharp-vscode/releases
|
|
[documentation]: https://github.com/OmniSharp/omnisharp-vscode/pull/157
|
|
|
|
corehost
|
|
========
|
|
|
|
The native executable prouduced by .NET CLI will produce trace output
|
|
if launched with `COREHOST_TRACE=1 ./powershell`.
|
|
|
|
CoreCLR PAL
|
|
===========
|
|
|
|
The native code in the CLR has debug channels to selectively output
|
|
information to the console. These are controlled by the
|
|
`PAL_DBG_CHANNELS`, e.g., `export PAL_DBG_CHANNELS="+all.all"`, as
|
|
detailed in the `dbgmsg.h` [header][].
|
|
|
|
[header]: https://github.com/dotnet/coreclr/blob/release/1.0.0-rc2/src/pal/src/include/pal/dbgmsg.h
|