我正在使用MSP430F5438A与使用Spy-By-Wire的Olimex MSP430_JTAG-TINY-V2接口。我们正在使用大内存模型。使用import Foundation
public enum AnEnum: String, Codable {
case enumValue
}
struct AStruct: Decodable {
enum CodingKeys: String, CodingKey {
case dictionary
}
let dictionary: [AnEnum: String]
}
public extension KeyedDecodingContainer {
public func decode(_ type: [AnEnum: String].Type, forKey key: Key) throws -> [AnEnum: String] {
let stringDictionary = try self.decode([String: String].self, forKey: key)
var dictionary = [AnEnum: String]()
for (key, value) in stringDictionary {
guard let anEnum = AnEnum(rawValue: key) else {
let context = DecodingError.Context(codingPath: codingPath, debugDescription: "Could not parse json key to an AnEnum object")
throw DecodingError.dataCorrupted(context)
}
dictionary[anEnum] = value
}
return dictionary
}
}
我们可以在低内存(<64kB)中设置断点,这些工作正常。如果尝试在高内存(> 64kB)中设置断点,虽然它已正确列出,但地址已被截断为16位。因此,例如,如果我在let jsonString = """
{
"dictionary" : {
"enumValue" : "someString"
}
}
"""
let data = jsonString.data(using: String.Encoding.utf8)!
let decoder = JSONDecoder()
let aStruct = try! decoder.decode(AStruct.self, from: data)
dump(aStruct)
/*
prints:
▿ __lldb_expr_148.AStruct
▿ dictionary: 1 key/value pair
▿ (2 elements)
- key: __lldb_expr_148.AnEnum.enumValue
- value: "someString"
*/
设置断点,则如果获取mspdebug
处的代码,则CPU将暂停。
我也尝试使用TI Launchpad(G2)作为调试器,我得到了相同的结果。
谷歌搜索这个问题没有任何结果(虽然也许我不是在找正确的事情?)任何人都可以对此有所了解吗?