Debugger: Pass uninitialized variables to the python dumpers

Reduces accessing uninitialized memory

Change-Id: I025e9070b9b17a806237619b484cb27230e7f494
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2017-03-30 09:15:48 +02:00
parent 8c86400329
commit c00bb1dcfb
3 changed files with 12 additions and 2 deletions

View File

@@ -125,7 +125,6 @@ class Dumper(DumperBase):
pass pass
val.isBaseClass = val.name == val.type.name val.isBaseClass = val.name == val.type.name
val.nativeValue = nativeValue val.nativeValue = nativeValue
val.lIsInScope = True
val.laddress = nativeValue.address() val.laddress = nativeValue.address()
return val return val
@@ -440,7 +439,9 @@ class Dumper(DumperBase):
variables = [] variables = []
for val in cdbext.listOfLocals(self.partialVariable): for val in cdbext.listOfLocals(self.partialVariable):
variables.append(self.fromNativeValue(val)) dumperVal = self.fromNativeValue(val)
dumperVal.lIsInScope = not dumperVal.name in self.uninitialized
variables.append(dumperVal)
self.handleLocals(variables) self.handleLocals(variables)
self.handleWatches(args) self.handleWatches(args)

View File

@@ -317,6 +317,8 @@ class DumperBase:
self.nativeMixed = int(args.get('nativemixed', '0')) self.nativeMixed = int(args.get('nativemixed', '0'))
self.autoDerefPointers = int(args.get('autoderef', '0')) self.autoDerefPointers = int(args.get('autoderef', '0'))
self.partialVariable = args.get('partialvar', '') self.partialVariable = args.get('partialvar', '')
self.uninitialized = args.get('uninitialized', [])
self.uninitialized = list(map(lambda x: self.hexdecode(x), self.uninitialized))
self.partialUpdate = int(args.get('partial', '0')) self.partialUpdate = int(args.get('partial', '0'))
self.fallbackQtVersion = 0x50200 self.fallbackQtVersion = 0x50200
#warn('NAMESPACE: "%s"' % self.qtNamespace()) #warn('NAMESPACE: "%s"' % self.qtNamespace())

View File

@@ -1238,6 +1238,13 @@ void CdbEngine::doUpdateLocals(const UpdateParameters &updateParameters)
cmd.arg("stringcutoff", action(MaximalStringLength)->value().toString()); cmd.arg("stringcutoff", action(MaximalStringLength)->value().toString());
cmd.arg("displaystringlimit", action(DisplayStringLimit)->value().toString()); cmd.arg("displaystringlimit", action(DisplayStringLimit)->value().toString());
if (boolSetting(UseCodeModel)) {
QStringList uninitializedVariables;
getUninitializedVariables(Internal::cppCodeModelSnapshot(),
frame.function, frame.file, frame.line, &uninitializedVariables);
cmd.arg("uninitialized", uninitializedVariables);
}
cmd.callback = [this](const DebuggerResponse &response) { cmd.callback = [this](const DebuggerResponse &response) {
if (response.resultClass == ResultDone) { if (response.resultClass == ResultDone) {
showMessage(response.data.toString(), LogMisc); showMessage(response.data.toString(), LogMisc);