Add QtCreator debugging helpers (wip)

This commit is contained in:
Nikita Lisitsa 2021-05-17 20:21:00 +03:00
parent bdd32ad40f
commit a106fd660d

110
psemektypes.py Normal file
View file

@ -0,0 +1,110 @@
############################################################################
#
# Copyright (C) 2016 The Qt Company Ltd.
# Contact: https://www.qt.io/licensing/
#
# This file is part of Qt Creator.
#
# Commercial License Usage
# Licensees holding valid commercial Qt licenses may use this file in
# accordance with the commercial license agreement provided with the
# Software or, alternatively, in accordance with the terms contained in
# a written agreement between you and The Qt Company. For licensing terms
# and conditions see https://www.qt.io/terms-conditions. For further
# information use the contact form at https://www.qt.io/contact-us.
#
# GNU General Public License Usage
# Alternatively, this file may be used under the terms of the GNU
# General Public License version 3 as published by the Free Software
# Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
# included in the packaging of this file. Please review the following
# information to ensure the GNU General Public License requirements will
# be met: https://www.gnu.org/licenses/gpl-3.0.html.
#
############################################################################
# This is a place to add your own dumpers for testing purposes.
# Any contents here will be picked up by GDB, LLDB, and CDB based
# debugging in Qt Creator automatically.
# NOTE: This file will get overwritten when updating Qt Creator.
#
# To add dumpers that don't get overwritten, copy this file here
# to a safe location outside the Qt Creator installation and
# make this location known to Qt Creator using the Debugger >
# Locals & Expressions > Extra Debugging Helpers setting.
# Example to display a simple type
# template<typename U, typename V> struct MapNode
# {
# U key;
# V data;
# }
#
# def qdump__MapNode(d, value):
# d.putValue("This is the value column contents")
# d.putExpandable()
# if d.isExpanded():
# with Children(d):
# # Compact simple case.
# d.putSubItem("key", value["key"])
# # Same effect, with more customization possibilities.
# with SubItem(d, "data")
# d.putItem("data", value["data"])
# Check http://doc.qt.io/qtcreator/creator-debugging-helpers.html
# for more details or look at qttypes.py, stdtypes.py, boosttypes.py
# for more complex examples.
import dumper
import struct
######################## Your code below #######################
typeFormats = {
'float': 'f',
'double': 'd',
'int': 'i',
}
def qdump__psemek__geom__vector(d, value):
size = value.type[1]
coordType = value.type[0]
canPrint = coordType.name in typeFormats
d.putExpandable()
if d.isExpanded() or not canPrint:
d.putItemCount(size)
d.putArrayData(value.address(), size, value.type[0])
else:
desc = ""
arr = None
for m in value.members(False):
if m.name == 'coords':
arr = m.data()
break
f = typeFormats[coordType.name]
for v in struct.iter_unpack(f, arr):
if len(desc) > 0:
desc += ", "
desc += '{:.5f}'.format(v[0])
d.putValue("(" + desc + ")")
def qdump__psemek__geom__point(d, value):
qdump__psemek__geom__vector(d, value)
def qdump__psemek__geom__interval(d, value):
coordType = value.type[0]
canPrint = coordType.name in typeFormats
d.putExpandable()
if d.isExpanded() or not canPrint:
# TODO
pass
else:
desc = ""
arr = value.data()
f = typeFormats[coordType.name]
for v in struct.iter_unpack(f, arr):
if len(desc) > 0:
desc += ", "
desc += '{:.5f}'.format(v[0])
d.putValue("[" + desc + "]")