This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 73467989c570f994ab34263d739a1970f6853a18 Author: xuxingliang <[email protected]> AuthorDate: Mon Oct 21 21:39:22 2024 +0800 gdb: move profiling commands to profile.py Add simple time command to test time cost of a command. Usage: (gdb) time memleak ... (gdb) Time elapsed: 1.23456s Signed-off-by: xuxingliang <[email protected]> --- tools/gdb/nuttxgdb/profile.py | 62 +++++++++++++++++++++++++++++++++++++++++++ tools/gdb/nuttxgdb/utils.py | 20 +------------- 2 files changed, 63 insertions(+), 19 deletions(-) diff --git a/tools/gdb/nuttxgdb/profile.py b/tools/gdb/nuttxgdb/profile.py new file mode 100644 index 0000000000..bf466f5742 --- /dev/null +++ b/tools/gdb/nuttxgdb/profile.py @@ -0,0 +1,62 @@ +############################################################################ +# tools/gdb/nuttxgdb/profile.py +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. The +# ASF licenses this file to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance with the +# License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +############################################################################ + +import gdb + +from .utils import import_check + + +class Profile(gdb.Command): + """Profile a gdb command + + Usage: profile <gdb command> + """ + + def __init__(self): + self.cProfile = import_check( + "cProfile", errmsg="cProfile module not found, try gdb-multiarch.\n" + ) + if not self.cProfile: + return + + super().__init__("profile", gdb.COMMAND_USER) + + def invoke(self, args, from_tty): + self.cProfile.run(f"gdb.execute('{args}')", sort="cumulative") + + +class Time(gdb.Command): + """Time a gdb command + + Usage: time <gdb command> + """ + + def __init__(self): + super().__init__("time", gdb.COMMAND_USER) + + def invoke(self, args, from_tty): + import time + + start = time.time() + gdb.execute(args) + end = time.time() + gdb.write(f"Time elapsed: {end - start:.6f}s\n") diff --git a/tools/gdb/nuttxgdb/utils.py b/tools/gdb/nuttxgdb/utils.py index 144282d3a3..f85b803656 100644 --- a/tools/gdb/nuttxgdb/utils.py +++ b/tools/gdb/nuttxgdb/utils.py @@ -345,6 +345,7 @@ def sizeof(t: Union[str, gdb.Type]): return t.sizeof + # Machine Specific Helper Functions @@ -911,22 +912,3 @@ class Addr2Line(gdb.Command): except gdb.error as e: gdb.write(f"Ignore {arg}: {e}\n") self.print_backtrace(addresses) - - -class Profile(gdb.Command): - """Profile a gdb command - - Usage: profile <gdb command> - """ - - def __init__(self): - self.cProfile = import_check( - "cProfile", errmsg="cProfile module not found, try gdb-multiarch.\n" - ) - if not self.cProfile: - return - - super().__init__("profile", gdb.COMMAND_USER) - - def invoke(self, args, from_tty): - self.cProfile.run(f"gdb.execute('{args}')", sort="cumulative")
