12
12
13
13
14
14
class TestDAP_memory (lldbdap_testcase .DAPTestCaseBase ):
15
- def test_readMemory (self ):
15
+ def test_memory_refs_variables (self ):
16
16
"""
17
- Tests the 'readMemory' request
17
+ Tests memory references for evaluate
18
18
"""
19
19
program = self .getBuildArtifact ("a.out" )
20
20
self .build_and_launch (program )
@@ -27,33 +27,13 @@ def test_readMemory(self):
27
27
self .continue_to_next_stop ()
28
28
29
29
locals = {l ["name" ]: l for l in self .dap_server .get_local_variables ()}
30
- rawptr_ref = locals ["rawptr" ]["memoryReference" ]
31
-
32
- # We can read the complete string
33
- mem = self .dap_server .request_readMemory (rawptr_ref , 0 , 5 )["body" ]
34
- self .assertEqual (mem ["unreadableBytes" ], 0 )
35
- self .assertEqual (b64decode (mem ["data" ]), b"dead\0 " )
36
-
37
- # Use an offset
38
- mem = self .dap_server .request_readMemory (rawptr_ref , 2 , 3 )["body" ]
39
- self .assertEqual (b64decode (mem ["data" ]), b"ad\0 " )
40
-
41
- # Use a negative offset
42
- mem = self .dap_server .request_readMemory (rawptr_ref , - 1 , 6 )["body" ]
43
- self .assertEqual (b64decode (mem ["data" ])[1 :], b"dead\0 " )
44
-
45
- # Reads of size 0 are successful
46
- # VS-Code sends those in order to check if a `memoryReference` can actually be dereferenced.
47
- mem = self .dap_server .request_readMemory (rawptr_ref , 0 , 0 )
48
- self .assertEqual (mem ["success" ], True )
49
- self .assertEqual (mem ["body" ]["data" ], "" )
50
30
51
- # Reads at offset 0x0 fail
52
- mem = self .dap_server . request_readMemory ( "0x0 " , 0 , 6 )
53
- self . assertEqual ( mem [ "success" ], False )
54
- self .assertEqual ( mem [ "message" ], "Memory region is not readable" )
31
+ # Pointers should have memory-references
32
+ self .assertIn ( "memoryReference " , locals [ "rawptr" ]. keys () )
33
+ # Non-pointers should also have memory-references
34
+ self .assertIn ( "memoryReference" , locals [ "not_a_ptr" ]. keys () )
55
35
56
- def test_memory_refs_variables (self ):
36
+ def test_memory_refs_evaluate (self ):
57
37
"""
58
38
Tests memory references for evaluate
59
39
"""
@@ -67,21 +47,14 @@ def test_memory_refs_variables(self):
67
47
)
68
48
self .continue_to_next_stop ()
69
49
70
- locals = {l ["name" ]: l for l in self .dap_server .get_local_variables ()}
71
-
72
- # Pointers should have memory-references
73
- self .assertIn ("memoryReference" , locals ["rawptr" ].keys ())
74
- # Smart pointers also have memory-references
75
50
self .assertIn (
76
51
"memoryReference" ,
77
- self .dap_server .get_local_variable_child ( "smartptr" , "pointer" ) .keys (),
52
+ self .dap_server .request_evaluate ( "rawptr" )[ "body" ] .keys (),
78
53
)
79
- # Non-pointers should not have memory-references
80
- self .assertNotIn ("memoryReference" , locals ["not_a_ptr" ].keys ())
81
54
82
- def test_memory_refs_evaluate (self ):
55
+ def test_memory_refs_set_variable (self ):
83
56
"""
84
- Tests memory references for evaluate
57
+ Tests memory references for `setVariable`
85
58
"""
86
59
program = self .getBuildArtifact ("a.out" )
87
60
self .build_and_launch (program )
@@ -93,21 +66,17 @@ def test_memory_refs_evaluate(self):
93
66
)
94
67
self .continue_to_next_stop ()
95
68
96
- # Pointers contain memory references
69
+ ptr_value = self . get_local_as_int ( "rawptr" )
97
70
self .assertIn (
98
71
"memoryReference" ,
99
- self .dap_server .request_evaluate ("rawptr + 1" )["body" ].keys (),
100
- )
101
-
102
- # Non-pointer expressions don't include a memory reference
103
- self .assertNotIn (
104
- "memoryReference" ,
105
- self .dap_server .request_evaluate ("1 + 3" )["body" ].keys (),
72
+ self .dap_server .request_setVariable (1 , "rawptr" , ptr_value + 2 )[
73
+ "body"
74
+ ].keys (),
106
75
)
107
76
108
- def test_memory_refs_set_variable (self ):
77
+ def test_readMemory (self ):
109
78
"""
110
- Tests memory references for `setVariable`
79
+ Tests the 'readMemory' request
111
80
"""
112
81
program = self .getBuildArtifact ("a.out" )
113
82
self .build_and_launch (program )
@@ -119,17 +88,29 @@ def test_memory_refs_set_variable(self):
119
88
)
120
89
self .continue_to_next_stop ()
121
90
122
- # Pointers contain memory references
123
- ptr_value = self .get_local_as_int ("rawptr" )
124
- self .assertIn (
125
- "memoryReference" ,
126
- self .dap_server .request_setVariable (1 , "rawptr" , ptr_value + 2 )[
127
- "body"
128
- ].keys (),
129
- )
91
+ ptr_deref = self .dap_server .request_evaluate ("*rawptr" )["body" ]
92
+ memref = ptr_deref ["memoryReference" ]
130
93
131
- # Non-pointer expressions don't include a memory reference
132
- self .assertNotIn (
133
- "memoryReference" ,
134
- self .dap_server .request_setVariable (1 , "not_a_ptr" , 42 )["body" ].keys (),
135
- )
94
+ # We can read the complete string
95
+ mem = self .dap_server .request_readMemory (memref , 0 , 5 )["body" ]
96
+ self .assertEqual (mem ["unreadableBytes" ], 0 )
97
+ self .assertEqual (b64decode (mem ["data" ]), b"dead\0 " )
98
+
99
+ # Use an offset
100
+ mem = self .dap_server .request_readMemory (memref , 2 , 3 )["body" ]
101
+ self .assertEqual (b64decode (mem ["data" ]), b"ad\0 " )
102
+
103
+ # Use a negative offset
104
+ mem = self .dap_server .request_readMemory (memref , - 1 , 6 )["body" ]
105
+ self .assertEqual (b64decode (mem ["data" ])[1 :], b"dead\0 " )
106
+
107
+ # Reads of size 0 are successful
108
+ # VS-Code sends those in order to check if a `memoryReference` can actually be dereferenced.
109
+ mem = self .dap_server .request_readMemory (memref , 0 , 0 )
110
+ self .assertEqual (mem ["success" ], True )
111
+ self .assertEqual (mem ["body" ]["data" ], "" )
112
+
113
+ # Reads at offset 0x0 fail
114
+ mem = self .dap_server .request_readMemory ("0x0" , 0 , 6 )
115
+ self .assertEqual (mem ["success" ], False )
116
+ self .assertEqual (mem ["message" ], "Memory region is not readable" )
0 commit comments