Skip to content

Commit e3b3ad9

Browse files
committed
fix: Remove symbolication that causes deadlocks
1 parent f246093 commit e3b3ad9

26 files changed

+50
-593
lines changed

Sentry.xcodeproj/project.pbxproj

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,6 @@
254254
63FE711B20DA4C1000CDBAE8 /* SentryCrashString.c in Sources */ = {isa = PBXBuildFile; fileRef = 63FE701420DA4C1000CDBAE8 /* SentryCrashString.c */; };
255255
63FE711D20DA4C1000CDBAE8 /* SentryCrashCPU_arm64.c in Sources */ = {isa = PBXBuildFile; fileRef = 63FE701520DA4C1000CDBAE8 /* SentryCrashCPU_arm64.c */; };
256256
63FE711F20DA4C1000CDBAE8 /* SentryCrashObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = 63FE701620DA4C1000CDBAE8 /* SentryCrashObjC.h */; };
257-
63FE712120DA4C1000CDBAE8 /* SentryCrashSymbolicator.c in Sources */ = {isa = PBXBuildFile; fileRef = 63FE701720DA4C1000CDBAE8 /* SentryCrashSymbolicator.c */; };
258257
63FE712320DA4C1000CDBAE8 /* SentryCrashID.h in Headers */ = {isa = PBXBuildFile; fileRef = 63FE701820DA4C1000CDBAE8 /* SentryCrashID.h */; };
259258
63FE712520DA4C1000CDBAE8 /* SentryCrashSignalInfo.c in Sources */ = {isa = PBXBuildFile; fileRef = 63FE701920DA4C1000CDBAE8 /* SentryCrashSignalInfo.c */; };
260259
63FE712720DA4C1000CDBAE8 /* SentryCrashThread.c in Sources */ = {isa = PBXBuildFile; fileRef = 63FE701A20DA4C1000CDBAE8 /* SentryCrashThread.c */; };
@@ -283,7 +282,6 @@
283282
63FE715720DA4C1100CDBAE8 /* SentryCrashThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 63FE703220DA4C1000CDBAE8 /* SentryCrashThread.h */; };
284283
63FE715920DA4C1100CDBAE8 /* SentryCrashCPU_x86_32.c in Sources */ = {isa = PBXBuildFile; fileRef = 63FE703320DA4C1000CDBAE8 /* SentryCrashCPU_x86_32.c */; };
285284
63FE715B20DA4C1100CDBAE8 /* SentryCrashSignalInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 63FE703420DA4C1000CDBAE8 /* SentryCrashSignalInfo.h */; };
286-
63FE715D20DA4C1100CDBAE8 /* SentryCrashSymbolicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 63FE703520DA4C1000CDBAE8 /* SentryCrashSymbolicator.h */; };
287285
63FE715F20DA4C1100CDBAE8 /* SentryCrashID.c in Sources */ = {isa = PBXBuildFile; fileRef = 63FE703620DA4C1000CDBAE8 /* SentryCrashID.c */; };
288286
63FE716320DA4C1100CDBAE8 /* SentryCrashDynamicLinker.h in Headers */ = {isa = PBXBuildFile; fileRef = 63FE703820DA4C1000CDBAE8 /* SentryCrashDynamicLinker.h */; };
289287
63FE716520DA4C1100CDBAE8 /* SentryCrashMemory.h in Headers */ = {isa = PBXBuildFile; fileRef = 63FE703920DA4C1000CDBAE8 /* SentryCrashMemory.h */; };
@@ -1592,7 +1590,6 @@
15921590
63FE701420DA4C1000CDBAE8 /* SentryCrashString.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SentryCrashString.c; sourceTree = "<group>"; };
15931591
63FE701520DA4C1000CDBAE8 /* SentryCrashCPU_arm64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SentryCrashCPU_arm64.c; sourceTree = "<group>"; };
15941592
63FE701620DA4C1000CDBAE8 /* SentryCrashObjC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SentryCrashObjC.h; sourceTree = "<group>"; };
1595-
63FE701720DA4C1000CDBAE8 /* SentryCrashSymbolicator.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SentryCrashSymbolicator.c; sourceTree = "<group>"; };
15961593
63FE701820DA4C1000CDBAE8 /* SentryCrashID.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SentryCrashID.h; sourceTree = "<group>"; };
15971594
63FE701920DA4C1000CDBAE8 /* SentryCrashSignalInfo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SentryCrashSignalInfo.c; sourceTree = "<group>"; };
15981595
63FE701A20DA4C1000CDBAE8 /* SentryCrashThread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SentryCrashThread.c; sourceTree = "<group>"; };
@@ -1621,7 +1618,6 @@
16211618
63FE703220DA4C1000CDBAE8 /* SentryCrashThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SentryCrashThread.h; path = ../../../Sentry/include/SentryCrashThread.h; sourceTree = "<group>"; };
16221619
63FE703320DA4C1000CDBAE8 /* SentryCrashCPU_x86_32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SentryCrashCPU_x86_32.c; sourceTree = "<group>"; };
16231620
63FE703420DA4C1000CDBAE8 /* SentryCrashSignalInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SentryCrashSignalInfo.h; sourceTree = "<group>"; };
1624-
63FE703520DA4C1000CDBAE8 /* SentryCrashSymbolicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SentryCrashSymbolicator.h; sourceTree = "<group>"; };
16251621
63FE703620DA4C1000CDBAE8 /* SentryCrashID.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SentryCrashID.c; sourceTree = "<group>"; };
16261622
63FE703820DA4C1000CDBAE8 /* SentryCrashDynamicLinker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SentryCrashDynamicLinker.h; path = ../../../Sentry/include/SentryCrashDynamicLinker.h; sourceTree = "<group>"; };
16271623
63FE703920DA4C1000CDBAE8 /* SentryCrashMemory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SentryCrashMemory.h; sourceTree = "<group>"; };
@@ -3371,8 +3367,6 @@
33713367
63FE701C20DA4C1000CDBAE8 /* SentryCrashStackCursor.h */,
33723368
63FE701420DA4C1000CDBAE8 /* SentryCrashString.c */,
33733369
63FE702C20DA4C1000CDBAE8 /* SentryCrashString.h */,
3374-
63FE701720DA4C1000CDBAE8 /* SentryCrashSymbolicator.c */,
3375-
63FE703520DA4C1000CDBAE8 /* SentryCrashSymbolicator.h */,
33763370
63FE701E20DA4C1000CDBAE8 /* SentryCrashSysCtl.c */,
33773371
63FE703D20DA4C1000CDBAE8 /* SentryCrashSysCtl.h */,
33783372
63FE701A20DA4C1000CDBAE8 /* SentryCrashThread.c */,
@@ -5243,7 +5237,6 @@
52435237
639FCF981EBC7B9700778193 /* SentryEvent.h in Headers */,
52445238
03F84D2527DD414C008FE43F /* SentryThreadState.hpp in Headers */,
52455239
8E4E7C6D25DAAAFE006AB9E2 /* SentryTransaction.h in Headers */,
5246-
63FE715D20DA4C1100CDBAE8 /* SentryCrashSymbolicator.h in Headers */,
52475240
FAE2DABA2E1F318900262307 /* SentryProfilingSwiftHelpers.h in Headers */,
52485241
D8ACE3CF2762187D00F5A213 /* SentryFileIOTrackingIntegration.h in Headers */,
52495242
FA27ECA12EBA325A00F2ECF7 /* SentryTraceContext+Private.h in Headers */,
@@ -6067,7 +6060,6 @@
60676060
63FE716720DA4C1100CDBAE8 /* SentryCrashCPU.c in Sources */,
60686061
63FE717320DA4C1100CDBAE8 /* SentryCrashC.c in Sources */,
60696062
6293F5752D422A95002BC3BD /* SentryStacktraceCodable.swift in Sources */,
6070-
63FE712120DA4C1000CDBAE8 /* SentryCrashSymbolicator.c in Sources */,
60716063
627C77892D50B6840055E966 /* SentryBreadcrumbCodable.swift in Sources */,
60726064
63FE70D720DA4C1000CDBAE8 /* SentryCrashMonitor_MachException.c in Sources */,
60736065
7B96572226830D2400C66E25 /* SentryScopeSyncC.c in Sources */,

Sources/Sentry/SentryCrashReportConverter.m

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -307,15 +307,13 @@ - (SentryFrame *)stackFrameAtIndex:(NSInteger)frameIndex inThreadIndex:(NSIntege
307307
= (uintptr_t)[frameDictionary[@"instruction_addr"] unsignedLongLongValue];
308308
NSDictionary *binaryImage = [self binaryImageForAddress:instructionAddress];
309309
SentryFrame *frame = [[SentryFrame alloc] init];
310-
frame.symbolAddress = sentry_formatHexAddress(frameDictionary[@"symbol_addr"]);
310+
// The symbol address is not known, so it defaults to 0
311+
frame.symbolAddress = @"0x0000000000000000";
311312
frame.instructionAddress = sentry_formatHexAddress(frameDictionary[@"instruction_addr"]);
312313
frame.imageAddress = sentry_formatHexAddress(binaryImage[@"image_addr"]);
313314
frame.package = binaryImage[@"name"];
314315
BOOL isInApp = [self.inAppLogic isInApp:binaryImage[@"name"]];
315316
frame.inApp = @(isInApp);
316-
if (frameDictionary[@"symbol_name"]) {
317-
frame.function = frameDictionary[@"symbol_name"];
318-
}
319317
return frame;
320318
}
321319

Sources/Sentry/SentryCrashStackEntryMapper.m

Lines changed: 6 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -25,36 +25,15 @@ - (SentryFrame *)sentryCrashStackEntryToSentryFrame:(SentryCrashStackEntry)stack
2525
{
2626
SentryFrame *frame = [[SentryFrame alloc] init];
2727

28-
if (stackEntry.symbolAddress != 0) {
29-
frame.symbolAddress = sentry_formatHexAddressUInt64(stackEntry.symbolAddress);
30-
}
31-
3228
frame.instructionAddress = sentry_formatHexAddressUInt64(stackEntry.address);
3329

34-
if (stackEntry.symbolName != NULL) {
35-
frame.function = [NSString stringWithCString:stackEntry.symbolName
36-
encoding:NSUTF8StringEncoding];
37-
}
38-
39-
// If there is no symbolication, because debug was disabled
40-
// we get image from the cache.
41-
if (stackEntry.imageAddress == 0 && stackEntry.imageName == NULL) {
42-
SentryBinaryImageInfo *info = [SentryDependencyContainer.sharedInstance.binaryImageCache
43-
imageByAddress:(uint64_t)stackEntry.address];
44-
45-
frame.imageAddress = sentry_formatHexAddressUInt64(info.address);
46-
frame.package = info.name;
47-
frame.inApp = @([self.inAppLogic isInApp:info.name]);
48-
} else {
49-
frame.imageAddress = sentry_formatHexAddressUInt64(stackEntry.imageAddress);
30+
// Get image from the cache.
31+
SentryBinaryImageInfo *info = [SentryDependencyContainer.sharedInstance.binaryImageCache
32+
imageByAddress:(uint64_t)stackEntry.address];
5033

51-
if (stackEntry.imageName != NULL) {
52-
NSString *imageName = [NSString stringWithCString:stackEntry.imageName
53-
encoding:NSUTF8StringEncoding];
54-
frame.package = imageName;
55-
frame.inApp = @([self.inAppLogic isInApp:imageName]);
56-
}
57-
}
34+
frame.imageAddress = sentry_formatHexAddressUInt64(info.address);
35+
frame.package = info.name;
36+
frame.inApp = @([self.inAppLogic isInApp:info.name]);
5837

5938
return frame;
6039
}

Sources/Sentry/SentryDefaultThreadInspector.m

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
#import "SentryCrashStackCursor.h"
44
#include "SentryCrashStackCursor_MachineContext.h"
55
#import "SentryCrashStackEntryMapper.h"
6-
#include "SentryCrashSymbolicator.h"
76
#import "SentryFrame.h"
87
#import "SentryOptions.h"
98
#import "SentryStacktrace.h"
@@ -32,7 +31,7 @@ @interface SentryDefaultThreadInspector ()
3231
// async-signal-safe.
3332
unsigned int
3433
getStackEntriesFromThread(SentryCrashThread thread, struct SentryCrashMachineContext *context,
35-
SentryCrashStackEntry *buffer, unsigned int maxEntries, bool asyncUnsafeSymbolicate)
34+
SentryCrashStackEntry *buffer, unsigned int maxEntries)
3635
{
3736
sentrycrashmc_getContextForThread(thread, context, NO);
3837
SentryCrashStackCursor stackCursor;
@@ -43,10 +42,8 @@ @interface SentryDefaultThreadInspector ()
4342
while (stackCursor.advanceCursor(&stackCursor)) {
4443
if (entries == maxEntries)
4544
break;
46-
if (asyncUnsafeSymbolicate == false || stackCursor.symbolicate(&stackCursor)) {
47-
buffer[entries] = stackCursor.stackEntry;
48-
entries++;
49-
}
45+
buffer[entries] = stackCursor.stackEntry;
46+
entries++;
5047
}
5148

5249
return entries;
@@ -56,12 +53,10 @@ @implementation SentryDefaultThreadInspector
5653

5754
- (id)initWithStacktraceBuilder:(SentryStacktraceBuilder *)stacktraceBuilder
5855
andMachineContextWrapper:(id<SentryCrashMachineContextWrapper>)machineContextWrapper
59-
symbolicate:(BOOL)symbolicate
6056
{
6157
if (self = [super init]) {
6258
self.stacktraceBuilder = stacktraceBuilder;
6359
self.machineContextWrapper = machineContextWrapper;
64-
self.symbolicate = symbolicate;
6560
}
6661
return self;
6762
}
@@ -74,13 +69,11 @@ - (instancetype)initWithOptions:(SentryOptions *_Nullable)options
7469
[[SentryCrashStackEntryMapper alloc] initWithInAppLogic:inAppLogic];
7570
SentryStacktraceBuilder *stacktraceBuilder =
7671
[[SentryStacktraceBuilder alloc] initWithCrashStackEntryMapper:crashStackEntryMapper];
77-
stacktraceBuilder.symbolicate = options.debug;
7872

7973
id<SentryCrashMachineContextWrapper> machineContextWrapper =
8074
[[SentryCrashDefaultMachineContextWrapper alloc] init];
8175
return [self initWithStacktraceBuilder:stacktraceBuilder
82-
andMachineContextWrapper:machineContextWrapper
83-
symbolicate:options.debug];
76+
andMachineContextWrapper:machineContextWrapper];
8477
}
8578

8679
- (SentryStacktrace *)stacktraceForCurrentThreadAsyncUnsafe
@@ -143,8 +136,6 @@ - (SentryStacktrace *)stacktraceForCurrentThreadAsyncUnsafe
143136
thread_act_array_t suspendedThreads = NULL;
144137
mach_msg_type_number_t numSuspendedThreads = 0;
145138

146-
bool symbolicate = self.symbolicate;
147-
148139
// SentryThreadInspector is crashing when there is too many threads.
149140
// We add a limit of 70 threads because in test with up to 100 threads it seems fine.
150141
// We are giving it an extra safety margin.
@@ -164,7 +155,7 @@ - (SentryStacktrace *)stacktraceForCurrentThreadAsyncUnsafe
164155
for (int i = 0; i < numSuspendedThreads; i++) {
165156
if (suspendedThreads[i] != currentThread) {
166157
int numberOfEntries = getStackEntriesFromThread(suspendedThreads[i], context,
167-
threadsInfos[i].stackEntries, MAX_STACKTRACE_LENGTH, symbolicate);
158+
threadsInfos[i].stackEntries, MAX_STACKTRACE_LENGTH);
168159
threadsInfos[i].stackLength = numberOfEntries;
169160
} else {
170161
// We can't use 'getStackEntriesFromThread' to retrieve stack frames from the

Sources/Sentry/SentryStacktraceBuilder.m

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
#import "SentryCrashStackCursor_MachineContext.h"
44
#import "SentryCrashStackCursor_SelfThread.h"
55
#import "SentryCrashStackEntryMapper.h"
6-
#import "SentryCrashSymbolicator.h"
76
#import "SentryFrame.h"
87
#import "SentryLogC.h"
98
#import "SentryStacktrace.h"
@@ -24,7 +23,6 @@ - (id)initWithCrashStackEntryMapper:(SentryCrashStackEntryMapper *)crashStackEnt
2423
{
2524
if (self = [super init]) {
2625
self.crashStackEntryMapper = crashStackEntryMapper;
27-
self.symbolicate = NO;
2826
}
2927
return self;
3028
}
@@ -41,10 +39,8 @@ - (SentryStacktrace *)retrieveStacktraceFromCursor:(SentryCrashStackCursor)stack
4139
// skip the marker frame
4240
continue;
4341
}
44-
if (self.symbolicate == NO || stackCursor.symbolicate(&stackCursor)) {
45-
frame = [self.crashStackEntryMapper mapStackEntryWithCursor:stackCursor];
46-
[frames addObject:frame];
47-
}
42+
frame = [self.crashStackEntryMapper mapStackEntryWithCursor:stackCursor];
43+
[frames addObject:frame];
4844
}
4945

5046
return [SentryStacktraceBuilder buildStacktraceFromFrames:frames];
@@ -96,7 +92,6 @@ - (nullable SentryStacktrace *)buildStacktraceForCurrentThreadAsyncUnsafe
9692
SENTRY_LOG_DEBUG(@"Building async-unsafe stack trace...");
9793
SentryCrashStackCursor stackCursor;
9894
sentrycrashsc_initSelfThread(&stackCursor, 0);
99-
stackCursor.symbolicate = sentrycrashsymbolicator_symbolicate_async_unsafe;
10095
return [self retrieveStacktraceFromCursor:stackCursor];
10196
}
10297

Sources/Sentry/SentryUseNSExceptionCallstackWrapper.m

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#import "SentryUseNSExceptionCallstackWrapper.h"
22
#import "SentryCrashStackEntryMapper.h"
3-
#import "SentryCrashSymbolicator.h"
43
#import "SentryOptions+Private.h"
54
#import "SentrySDK+Private.h"
65
#import "SentryStacktraceBuilder.h"
@@ -40,12 +39,11 @@ - (instancetype)initWithName:(NSExceptionName)aName
4039
SentryCrashStackEntryMapper *crashStackToEntryMapper = [self buildCrashStackToEntryMapper];
4140
NSMutableArray<SentryFrame *> *frames = [NSMutableArray array];
4241

43-
// Iterate over all the addresses, symbolicate and create a SentryFrame
42+
// Iterate over all the addresses and create a SentryFrame
4443
[self.returnAddressesArray
4544
enumerateObjectsUsingBlock:^(NSNumber *_Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) {
4645
SentryCrashStackCursor stackCursor;
4746
stackCursor.stackEntry.address = [obj unsignedLongValue];
48-
sentrycrashsymbolicator_symbolicate_async_unsafe_sentryDlAddr(&stackCursor);
4947

5048
[frames addObject:[crashStackToEntryMapper
5149
sentryCrashStackEntryToSentryFrame:stackCursor.stackEntry]];

Sources/Sentry/include/SentryCrashDynamicLinker.h

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -97,26 +97,6 @@ uint32_t sentrycrashdl_imageNamed(const char *const imageName, bool exactMatch);
9797
*/
9898
const uint8_t *sentrycrashdl_imageUUID(const char *const imageName, bool exactMatch);
9999

100-
/**
101-
* ATTENTION: This method isn't async-safe as it accesses @c _dyld_get_image_header, which acquires
102-
* a lock. We plan on removing this method with
103-
* https://github.com/getsentry/sentry-cocoa/issues/2996.
104-
*
105-
*
106-
* This method searches the dynamic loader for information about any image
107-
* containing the specified address. It may not be entirely successful in
108-
* finding information, in which case any fields it could not find will be set
109-
* to NULL.
110-
*
111-
* Unlike dladdr(), this method does not make use of locks, and does not call
112-
* async-unsafe functions.
113-
*
114-
* @param address The address to search for.
115-
* @param info Gets filled out by this function.
116-
* @return true if at least some information was found.
117-
*/
118-
bool sentrycrashdl_dladdr(const uintptr_t address, Dl_info *const info);
119-
120100
void sentrycrashdl_getCrashInfo(uint64_t address, SentryCrashBinaryImage *buffer);
121101

122102
void sentrycrashdl_initialize(void);

Sources/Sentry/include/SentryDefaultThreadInspector.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ NS_ASSUME_NONNULL_BEGIN
1515
SENTRY_NO_INIT
1616

1717
- (id)initWithStacktraceBuilder:(SentryStacktraceBuilder *)stacktraceBuilder
18-
andMachineContextWrapper:(id<SentryCrashMachineContextWrapper>)machineContextWrapper
19-
symbolicate:(BOOL)symbolicate;
18+
andMachineContextWrapper:(id<SentryCrashMachineContextWrapper>)machineContextWrapper;
2019

2120
- (instancetype)initWithOptions:(SentryOptions *_Nullable)options;
2221

Sources/Sentry/include/SentryStacktraceBuilder.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,6 @@ NS_ASSUME_NONNULL_BEGIN
1515
@interface SentryStacktraceBuilder : NSObject
1616
SENTRY_NO_INIT
1717

18-
/**
19-
* Whether the stack trace frames should be fully symbolicated
20-
* or only contain instruction address and binary image.
21-
*/
22-
@property (nonatomic) BOOL symbolicate;
23-
2418
- (id)initWithCrashStackEntryMapper:(SentryCrashStackEntryMapper *)crashStackEntryMapper;
2519

2620
/**

Sources/SentryCrash/Recording/SentryCrashReport.c

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -799,20 +799,6 @@ writeBacktrace(const SentryCrashReportWriter *const writer, const char *const ke
799799
while (stackCursor->advanceCursor(stackCursor)) {
800800
writer->beginObject(writer, NULL);
801801
{
802-
if (stackCursor->symbolicate(stackCursor)) {
803-
if (stackCursor->stackEntry.imageName != NULL) {
804-
writer->addStringElement(writer, SentryCrashField_ObjectName,
805-
sentrycrashfu_lastPathEntry(stackCursor->stackEntry.imageName));
806-
}
807-
writer->addUIntegerElement(writer, SentryCrashField_ObjectAddr,
808-
stackCursor->stackEntry.imageAddress);
809-
if (stackCursor->stackEntry.symbolName != NULL) {
810-
writer->addStringElement(writer, SentryCrashField_SymbolName,
811-
stackCursor->stackEntry.symbolName);
812-
}
813-
writer->addUIntegerElement(writer, SentryCrashField_SymbolAddr,
814-
stackCursor->stackEntry.symbolAddress);
815-
}
816802
writer->addUIntegerElement(
817803
writer, SentryCrashField_InstructionAddr, stackCursor->stackEntry.address);
818804
}

0 commit comments

Comments
 (0)