From f3eca5d7e073f9dc1f10dca3aa97bfe2089f88c8 Mon Sep 17 00:00:00 2001 From: "Yann E. MORIN" Date: Sun, 21 Aug 2022 10:41:28 +0200 Subject: [PATCH] utils/genrandconfig: dump traceback for unhandled exceptions In case of an unexpected error, we currently only print the exception as an str(). For example, the recent issue with the glibc version check only reported: TypeError: cannot use a string pattern on a bytes-like object That does not help in fixing the issue; the exception text is also not usually very user-friendly either anyway. We change the reporting to print the traceback, which in the glibc version check mentioned above, the error is reported as: Traceback (most recent call last): File "./utils/genrandconfig", line 740, in ret = gen_config(args) File "./utils/genrandconfig", line 676, in gen_config if not is_toolchain_usable(configfile, toolchainconfig): File "./utils/genrandconfig", line 186, in is_toolchain_usable if StrictVersion('2.14') > StrictVersion(glibc_version): File "/usr/lib/python3.8/distutils/version.py", line 40, in __init__ self.parse(vstring) File "/usr/lib/python3.8/distutils/version.py", line 135, in parse match = self.version_re.match(vstring) TypeError: cannot use a string pattern on a bytes-like object With this, the error is much easier to pinpoint (it's the last one that is not in a system module). Signed-off-by: Yann E. MORIN Signed-off-by: Thomas Petazzoni (cherry picked from commit b6bfa3f744d1dabd99ac74cf8008fb0cdfecdcb8) Signed-off-by: Peter Korsgaard --- utils/genrandconfig | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/utils/genrandconfig b/utils/genrandconfig index fba2b0a009..629efbbfd9 100755 --- a/utils/genrandconfig +++ b/utils/genrandconfig @@ -24,6 +24,7 @@ import os from random import randint import subprocess import sys +import traceback from distutils.version import StrictVersion import platform @@ -443,7 +444,7 @@ if __name__ == '__main__': try: ret = gen_config(args) - except Exception as e: - print(str(e), file=sys.stderr) + except Exception: + traceback.print_exc() parser.exit(1) parser.exit(ret)