MCPcopy Create free account
hub / github.com/microsoft/vscode-cpptools / handleCrashFileRead

Function handleCrashFileRead

Extension/src/LanguageServer/extension.ts:1295–1468  ·  view source on GitHub ↗
(crashDirectory: string, crashFile: string, crashDate: Date, err: NodeJS.ErrnoException | undefined | null, data: string)

Source from the content-addressed store, hash-verified

1293}
1294
1295async function handleCrashFileRead(crashDirectory: string, crashFile: string, crashDate: Date, err: NodeJS.ErrnoException | undefined | null, data: string): Promise<void> {
1296 if (err) {
1297 if (err.code === "ENOENT") {
1298 return; // ignore known issue
1299 }
1300 return logCppCrashTelemetry("readFile: " + err.code);
1301 }
1302
1303 const lines: string[] = data.split("\n");
1304 let addressData: string;
1305 const isCppToolsSrv2: boolean = crashFile.startsWith("cpptools-srv2");
1306 const isCppToolsSrv: boolean = crashFile.startsWith("cpptools-srv");
1307 const telemetryHeader: string = (isCppToolsSrv2 ? "cpptools-srv2.txt" : isCppToolsSrv ? "cpptools-srv.txt" : crashFile) + "\n";
1308 const filtPath: string | null = which.sync("c++filt", { nothrow: true });
1309 const isMac: boolean = process.platform === "darwin";
1310 const startStr: string = isMac ? " _" : "<";
1311 const offsetStr: string = isMac ? " + " : "+";
1312 const endOffsetStr: string = isMac ? " " : " <";
1313 const dotStr: string = "…\n";
1314 let signalType: string;
1315 let crashLog: string = "";
1316 let crashStackStartLine: number = 0;
1317 if (lines[0] === "LOG") {
1318 let crashLogLine: number = 1;
1319 for (; crashLogLine < lines.length; ++crashLogLine) {
1320 let pendingCrashLogLine = lines[crashLogLine];
1321 if (pendingCrashLogLine === "ENDLOG") {
1322 break;
1323 }
1324 pendingCrashLogLine += "\n";
1325 if (containsFilteredTelemetryData(pendingCrashLogLine)) {
1326 crashLog += "?\n";
1327 } else {
1328 crashLog += pendingCrashLogLine;
1329 }
1330 }
1331 crashLog = crashLog.trimEnd();
1332 crashStackStartLine = ++crashLogLine;
1333 }
1334 if (lines[crashStackStartLine].startsWith("SIG")) {
1335 signalType = `${lines[crashStackStartLine]}\n`;
1336 addressData = `${lines[crashStackStartLine + 1]}:${lines[crashStackStartLine + 2]}\n`; // signalCode:signalAddr
1337 crashStackStartLine += 3;
1338 } else {
1339 // The signal type may fail to be written.
1340 // Intentionally different from SIGUNKNOWN from cpptools,
1341 // and not SIG-? to avoid matching the regex in containsFilteredTelemetryData.
1342 signalType = "SIGMISSING\n";
1343 addressData = ".\n";
1344 }
1345 data = telemetryHeader + signalType;
1346 let crashCallStack: string = "";
1347 let validFrameFound: boolean = false;
1348 for (let lineNum: number = crashStackStartLine; lineNum < lines.length - 3; ++lineNum) { // skip last lines
1349 const line: string = lines[lineNum];
1350 const startPos: number = line.indexOf(startStr);
1351 let pendingCallStack: string = "";
1352 if (startPos === -1 || line[startPos + (isMac ? 1 : 4)] === "+") {

Callers 1

watchForCrashesFunction · 0.85

Calls 6

logCppCrashTelemetryFunction · 0.85
appendLineMethod · 0.80
resolveMethod · 0.65
catchMethod · 0.45

Tested by

no test coverage detected