Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Parse infolog.txt on launch for any engine crashes, and prompt the user to upload it automatically if it detects any stack traces #92

Open
Beherith opened this issue Jun 25, 2021 · 0 comments

Comments

@Beherith
Copy link
Contributor

Quite often, valuable crash logs are lost because the user just restarts the launcher when asked to post an infolog.
This could be mitigated by parsing the infolog.txt on launcher start, and prompting the user.

"The launcher has detected an engine crash report from a previous session, would you like to upload the infolog.txt?" [yes/no]

It would be nice to use the logs.springrts.com tag functionality to mark these logs as well.

The stacktrace translator has a good set of regular expressions [python] for identifying if there was a useable crash report:

`# Match common pre- and suffix on infolog lines. This also allows

"empty" prefixes followed by any amount of trailing whitespace.

the a-zA-Z class can be "Warning" or "Error"

RE_PREFIX = r'^(([t=([0-9:.])])?(?:[(?:f=)?\s-?\d+]\s*)?(?:[a-zA-Z]+:))\s*' # teifion says this is good for f=-00
RE_SUFFIX = r'(?:[\r\n]+$)?'

Match stackframe lines, captures the module name and the address.

Example: '[0] (0) C:\Program Files\Spring\spring.exe [0x0080F268]'

-> ('C:\Program Files\Spring\spring.exe', '0x0080F268')

NOTE: does not match format of stackframe lines on Linux

#[t=00:02:04.492434][f=0000536] Error: (0) C:\Users\xxx\Documents\My Games\Spring\engine\spring_bar_{BAR}104.0.1-1695-gbd6b256_windows-64-minimal-portable\spring.exe [0x004DD130]
#Spring 104.0.1-1695-gbd6b256 BAR
RE_STACKFRAME = RE_PREFIX + r'(\d+)\s+(.(?:.exe|.dll))(?:([^)]))?\s+[(0x[\dA-Fa-f]+)]' + RE_SUFFIX

regex for RC12 versions: first two parts are

mandatory, last two form one optional group

RE_VERSION_NAME_PREFIX = "(?:[sS]pring)"
RE_VERSION_STRING_RC12 = "([0-9]+.[0-9]+[.0-9](?:-[0-9]+-g[0-9a-f]+)?)"
RE_VERSION_BRANCH_NAME = "([a-zA-Z0-9-]+)?"
RE_VERSION_BUILD_FLAGS = "?(?:\s
((?:[a-zA-Z0-9-]+)))?"
RE_VERSION =
RE_VERSION_NAME_PREFIX + " ?" +
RE_VERSION_STRING_RC12 + " ?" +
RE_VERSION_BRANCH_NAME + " ?" +
RE_VERSION_BUILD_FLAGS

Match complete line containing version string.

NOTE:

these are highly sensitive to changes in format

strings passed to LOG(), perhaps define them in

a header and parse that?

RE_VERSION_LINES = [
x % (RE_PREFIX, RE_VERSION, RE_SUFFIX) for x in [
r'%sStacktrace for %s:%s',
r'%sStacktrace ([a-zA-Z0-9 ]+) for %s:%s',

	## legacy version patterns
	r'%s%s has crashed\.%s',
	r'%s\[Watchdog\] Hang detection triggered for %s\.%s',
	r'%sSegmentation fault \(SIGSEGV\) in %s%s',
	r'%sAborted \(SIGABRT\) in %s%s',
	r'%sError handler invoked for %s\.%s',
]

]`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant