[LLDB] Fix display of value of a vector variables in watchpoint operations

Reviewers: clayborg, zturner.
Subscribers: jaydeep, bhushan, sagar, nitesh.jain, brucem,lldb-commits.
Differential Revision: http://reviews.llvm.org/D13202

llvm-svn: 249838
This commit is contained in:
Mohit K. Bhakkad 2015-10-09 15:13:20 +00:00
parent 5df85cebfb
commit 18af8a20c5
4 changed files with 95 additions and 3 deletions

View File

@ -221,11 +221,28 @@ Watchpoint::DumpSnapshots(Stream *s, const char *prefix) const
if (m_old_value_sp)
{
s->Printf("\n%sold value: %s", prefix, m_old_value_sp->GetValueAsCString());
const char *old_value_cstr = m_old_value_sp->GetValueAsCString();
if (old_value_cstr && old_value_cstr[0])
s->Printf("\n%sold value: %s", prefix, old_value_cstr);
else
{
const char *old_summary_cstr = m_old_value_sp-> GetSummaryAsCString();
if (old_summary_cstr && old_summary_cstr[0])
s->Printf("\n%sold value: %s", prefix, old_summary_cstr);
}
}
if (m_new_value_sp)
{
s->Printf("\n%snew value: %s", prefix, m_new_value_sp->GetValueAsCString());
const char *new_value_cstr = m_new_value_sp->GetValueAsCString();
if (new_value_cstr && new_value_cstr[0])
s->Printf("\n%snew value: %s", prefix, new_value_cstr);
else
{
const char *new_summary_cstr = m_new_value_sp-> GetSummaryAsCString();
if (new_summary_cstr && new_summary_cstr[0])
s->Printf("\n%snew value: %s", prefix, new_summary_cstr);
}
}
}

View File

@ -0,0 +1,5 @@
LEVEL = ../../../make
C_SOURCES := main.c
include $(LEVEL)/Makefile.rules

View File

@ -0,0 +1,56 @@
"""
Test displayed value of a vector variable while doing watchpoint operations
"""
import os, time
import unittest2
import lldb
from lldbtest import *
import lldbutil
class TestValueOfVectorVariableTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
@dsym_test
def test_value_of_vector_variable_with_dsym_using_watchpoint_set(self):
"""Test verify displayed value of vector variable."""
self.buildDsym(dictionary=self.d)
self.setTearDownCleanup(dictionary=self.d)
self.value_of_vector_variable_with_watchpoint_set()
@dwarf_test
def test_value_of_vector_variable_with_dwarf_using_watchpoint_set(self):
"""Test verify displayed value of vector variable."""
self.buildDwarf(dictionary=self.d)
self.setTearDownCleanup(dictionary=self.d)
self.value_of_vector_variable_with_watchpoint_set()
def setUp(self):
# Call super's setUp().
TestBase.setUp(self)
# Our simple source filename.
self.source = 'main.c'
self.exe_name = 'a.out'
self.d = {'C_SOURCES': self.source, 'EXE': self.exe_name}
def value_of_vector_variable_with_watchpoint_set(self):
"""Test verify displayed value of vector variable"""
exe = os.path.join(os.getcwd(), 'a.out')
self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
# Set break to get a frame
self.runCmd("b main")
# Run the program.
self.runCmd("run", RUN_SUCCEEDED)
# Value of a vector variable should be displayed correctly
self.expect("watchpoint set variable global_vector", WATCHPOINT_CREATED,
substrs = ['new value: (1, 2, 3, 4, 5, 6, 7, 8)'])
if __name__ == '__main__':
import atexit
lldb.SBDebugger.Initialize()
atexit.register(lambda: lldb.SBDebugger.Terminate())
unittest2.main()

View File

@ -0,0 +1,14 @@
//===-- main.c --------------------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
typedef short v8i16 __attribute__ ((vector_size(16)));
v8i16 global_vector = {1, 2, 3, 4, 5, 6, 7, 8};
int main()
{
}