dotnet / dotnet/diagnostics

Crash when debugging with lldb on MacOS

Open
#4,769 13 comments 1 reaction 0 assignees View on GitHub
documentation os-mac-os-x
Dominant language
C++
Stars
1.3k
Forks
404
Avg merge
2d 3h
Merged PRs (30d)
38

Description

### Description

When using a native lldb debugger attached to CoreCLR on MacOS (ARM64) breakpoints in certain locations can cause the process to crash.

### Reproduction Steps

Sample code:
```
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
Console.ReadKey();
string foo = null;
Console.WriteLine($"foo: {foo.Length}");
}
}
```
The idea of the sample is to trigger the native exception handling for a null reference exception. Which is where we have our breakpoint in lldb.

1. Run sample
2. attach lldb debugger to process
3. put a breakpoint on function PAL_DispatchException: `breakpoint set --name PAL_DispatchException`
4. Press a key in the CoreCLR console for the running process to trigger the exception
5. See the breakpoint hit in lldb, usually in some memmove on an access violation
6. Attempt to continue, silent crash occurs. If you wait long enough MacOS will usually give you a dialog with a crash report. It looks like there might be a stack overflow in the exception handling.

### Expected behavior

No crash

### Actual behavior

Silent crash.

### Regression?

_No response_

### Known Workarounds

_No response_

### Configuration

.net version 8.0.201
MacOS -- 14.5
M1 ARM64
Does not happen on windows. I haven't tried linux yet.

### Other information

If it helps the beginning few frames of what I suspect is an overflow looks like:
```
0 libcoreclr.dylib 0x3289a5d4c CorUnix::GetCurrentPalThread() + 0 (thread.hpp:684) [inlined]
1 libcoreclr.dylib 0x3289a5d4c CorUnix::InternalGetCurrentThread() + 0 (thread.hpp:689) [inlined]
2 libcoreclr.dylib 0x3289a5d4c PAL_DispatchException + 36 (machexception.cpp:428)
3 libcoreclr.dylib 0x3289a5a2c PAL_DispatchExceptionWrapper + 16 (dispatchexceptionwrapper.S:39)
4 libcoreclr.dylib 0x3289a5d4c PAL_DispatchException + 36 (machexception.cpp:422)
5 libcoreclr.dylib 0x3289a5a2c PAL_DispatchExceptionWrapper + 16 (dispatchexceptionwrapper.S:39)
6 libcoreclr.dylib 0x3289a5d4c PAL_DispatchException + 36 (machexception.cpp:422)
7 libcoreclr.dylib 0x3289a5a2c PAL_DispatchExceptionWrapper + 16 (dispatchexceptionwrapper.S:39)
8 libcoreclr.dylib 0x3289a5d4c PAL_DispatchException + 36 (machexception.cpp:422)
9 libcoreclr.dylib 0x3289a5a2c PAL_DispatchExceptionWrapper + 16 (dispatchexceptionwrapper.S:39)
10 libcoreclr.dylib 0x3289a5d4c PAL_DispatchException + 36 (machexception.cpp:422)
11 libcoreclr.dylib 0x3289a5a2c PAL_DispatchExceptionWrapper + 16 (dispatchexceptionwrapper.S:39)
```
This is followed by 500 ish more frames of the same thing.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.