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")

Reply via email to