Skip to content

Commit 642f101

Browse files
committed
fix: siginfo now handle other informations
1 parent 018d1ea commit 642f101

7 files changed

Lines changed: 51 additions & 8 deletions

File tree

dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/CrashUploader.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,16 @@ private RequestBody makeErrorTrackingRequestBody(@Nonnull CrashLog payload, bool
544544
writer.name("si_signo_human_readable").value(payload.sigInfo.name);
545545
writer.name("si_signo").value(payload.sigInfo.number);
546546
}
547+
if (payload.sigInfo.action != null) {
548+
writer.name("si_code").value(payload.sigInfo.code);
549+
writer.name("si_code_human_readable").value(payload.sigInfo.action);
550+
}
551+
if (payload.sigInfo.pid != null) {
552+
writer.name("si_pid").value(payload.sigInfo.pid);
553+
}
554+
if (payload.sigInfo.uid != null) {
555+
writer.name("si_uid").value(payload.sigInfo.uid);
556+
}
547557
writer.endObject();
548558
}
549559

dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/dto/SigInfo.java

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,27 @@ public class SigInfo {
1919
@Json(name = "si_addr")
2020
public final String address;
2121

22-
public SigInfo(Integer number, String name, Integer code, String action, String address) {
22+
@Json(name = "si_pid")
23+
public final Integer pid;
24+
25+
@Json(name = "si_uid")
26+
public final Integer uid;
27+
28+
public SigInfo(
29+
Integer number,
30+
String name,
31+
Integer code,
32+
String action,
33+
String address,
34+
Integer pid,
35+
Integer uid) {
2336
this.number = number;
2437
this.name = name;
2538
this.address = address;
2639
this.code = code;
2740
this.action = action;
41+
this.pid = pid;
42+
this.uid = uid;
2843
}
2944

3045
@Override
@@ -35,11 +50,13 @@ public boolean equals(Object o) {
3550
&& Objects.equals(name, sigInfo.name)
3651
&& Objects.equals(address, sigInfo.address)
3752
&& Objects.equals(code, sigInfo.code)
38-
&& Objects.equals(action, sigInfo.action);
53+
&& Objects.equals(action, sigInfo.action)
54+
&& Objects.equals(pid, sigInfo.pid)
55+
&& Objects.equals(uid, sigInfo.uid);
3956
}
4057

4158
@Override
4259
public int hashCode() {
43-
return Objects.hash(number, name, address, code, action);
60+
return Objects.hash(number, name, address, code, action, pid, uid);
4461
}
4562
}

dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/parsers/HotspotCrashLogParser.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ public HotspotCrashLogParser() {
6363
private static final Pattern SIGINFO_PARSER =
6464
Pattern.compile(
6565
"siginfo:\\s+si_signo:\\s+(\\d+)\\s+\\((\\w+)\\),\\s+si_code:\\s+(\\d+)\\s+\\(([^)]+)\\),\\s+si_addr:\\s+(0x[0-9a-fA-F]+)");
66+
private static final Pattern SIGINFO_SI_USER_PARSER =
67+
Pattern.compile(
68+
"siginfo:\\s+si_signo:\\s+(\\d+)\\s+\\((\\w+)\\),\\s+si_code:\\s+(\\d+)\\s+\\(([^)]+)\\),\\s+si_pid:\\s+(\\d+),\\s+si_uid:\\s+(\\d+)");
6669
private static final Pattern DYNAMIC_LIBS_PATH_PARSER =
6770
Pattern.compile("^(?:0x)?[0-9a-fA-F]+(?:-[0-9a-fA-F]+)?\\s+(?:[^\\s/\\[]+\\s+)*(.*)$");
6871

@@ -284,7 +287,20 @@ public CrashLog parse(String uuid, String crashLog) {
284287
Integer siCode = safelyParseInt(siginfoMatcher.group(3));
285288
String sigAction = siginfoMatcher.group(4);
286289
String address = siginfoMatcher.group(5);
287-
sigInfo = new SigInfo(number, name, siCode, sigAction, address);
290+
sigInfo = new SigInfo(number, name, siCode, sigAction, address, null, null);
291+
} else {
292+
// siginfo: si_signo: 11 (SIGSEGV), si_code: 0 (SI_USER), si_pid: 554848, si_uid:
293+
// 1000
294+
final Matcher siUserMatcher = SIGINFO_SI_USER_PARSER.matcher(line);
295+
if (siUserMatcher.matches()) {
296+
Integer number = safelyParseInt(siUserMatcher.group(1));
297+
String name = siUserMatcher.group(2);
298+
Integer siCode = safelyParseInt(siUserMatcher.group(3));
299+
String sigAction = siUserMatcher.group(4);
300+
Integer siPid = safelyParseInt(siUserMatcher.group(5));
301+
Integer siUid = safelyParseInt(siUserMatcher.group(6));
302+
sigInfo = new SigInfo(number, name, siCode, sigAction, null, siPid, siUid);
303+
}
288304
}
289305
} else if (line.contains("P R O C E S S")) {
290306
state = State.SEEK_DYNAMIC_LIBRARIES;

dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/parsers/J9JavacoreParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ private SigInfo buildSigInfo(String eventType, String eventCode) {
330330
signalNumber = parseEventCode(eventCode);
331331
}
332332

333-
return new SigInfo(signalNumber, signalName, null, null, null);
333+
return new SigInfo(signalNumber, signalName, null, null, null, null, null);
334334
}
335335

336336
private int parseEventCode(String eventCode) {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"timestamp":"2024-09-20T13:19:06Z","ddsource":"crashtracker","error":{"is_crash":true,"type":"UNKNOWN","message":"Process terminated by signal UNKNOWN","source_type":"Crashtracking","stack":{"format":"CrashTrackerV1","frames":[{"function":"__pthread_clockjoin_ex+0x255","path":"libpthread.so.0","relative_address":"0x9cd5"}]}}}
1+
{"timestamp":"2024-09-20T13:19:06Z","ddsource":"crashtracker","error":{"is_crash":true,"type":"SIGSEGV","message":"Process terminated by signal SIGSEGV","source_type":"Crashtracking","stack":{"format":"CrashTrackerV1","frames":[{"function":"__pthread_clockjoin_ex+0x255","path":"libpthread.so.0","relative_address":"0x9cd5"}]}},"sig_info":{"si_signo_human_readable":"SIGSEGV","si_signo":11,"si_code":0,"si_code_human_readable":"SI_USER","si_pid":554848,"si_uid":1000}}

dd-java-agent/agent-crashtracking/src/test/resources/golden/errortracking/sample-crash-for-telemetry.txt

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"data_schema_version":"1.0","error":{"is_crash":true,"kind":"UNKNOWN","message":"Process terminated by signal UNKNOWN","source_type":"Crashtracking","stack":{"format":"CrashTrackerV1","frames":[{"function":"__pthread_clockjoin_ex+0x255","path":"libpthread.so.0","relative_address":"0x9cd5"}]}},"incomplete":false,"metadata":{"family":"java","library_name":"dd-trace-java","library_version":"1.60.0-SNAPSHOT~cffe9c6085"},"os_info":{"architecture":"aarch64","bitness":"64","os_type":"Mac OS X","version":{"Semantic":[15,7,1]}},"proc_info":{"pid":576034},"timestamp":"2024-09-20T13:19:06Z","uuid":"a4194cd6-8cb3-45fd-9bd9-3af83e0a3ad3","version_id":0}
1+
{"data_schema_version":"1.0","error":{"is_crash":true,"kind":"SIGSEGV","message":"Process terminated by signal SIGSEGV","source_type":"Crashtracking","stack":{"format":"CrashTrackerV1","frames":[{"function":"__pthread_clockjoin_ex+0x255","path":"libpthread.so.0","relative_address":"0x9cd5"}]}},"incomplete":false,"metadata":{"family":"java","library_name":"dd-trace-java","library_version":"1.60.0-SNAPSHOT~cffe9c6085"},"os_info":{"architecture":"aarch64","bitness":"64","os_type":"Mac OS X","version":{"Semantic":[15,7,1]}},"proc_info":{"pid":576034},"sig_info":{"si_code":0,"si_code_human_readable":"SI_USER","si_pid":554848,"si_signo":11,"si_signo_human_readable":"SIGSEGV","si_uid":1000},"timestamp":"2024-09-20T13:19:06Z","uuid":"a4194cd6-8cb3-45fd-9bd9-3af83e0a3ad3","version_id":0}

0 commit comments

Comments
 (0)