最近在调试一次SMBIOS的动态更新以及I2c设备的配置读取时,遇到了很多问题,特此总结:

1. 第一个是调试一个I2c设备的时候,遇到了一个很奇怪的问题,也由此问题总结了下SMBUS模块的知识,如下:

 待完成

2. 在动态更新到SMBIOS某些type字串时,遇到很多细节问题,总结如下:

1)问题:同样的代码,放置位置不同会导致代码跑飞:

  如下图,在获得了SmBiosType1Record的Protocol时,如果StringNumber的两个变量赋值分开,将红框代码移至下面,就会导致值改变,目前还不太清楚原因,这个问题以后要注意。

2) 有关某个SMBIOS的Handle值

原本通过笔者认为,这个handle可以通过SmbiosType1Record->Hdr->Handle的方式直接获取到,但是实际也会有问题,第一个 Smbios->UpdateString()函数可以正常执行,但是执行完之后,在执行第二个时,Handle的值就不正确了,这个问题与上面的问题类似,都是在执行完第一个函数后,SmbiosType1Record这个结构体指针的值会有所变化,因此我怀疑第一个函数执行时,会改变SmbiosType1Record的指向或者内容。要搞清楚这个问题,又要牵扯到什么是Handle什么是Protocol了,他们在代码中的呈现形式什么呢?请参照如下文章:

3)在使用gEfiSmbiosProtocol下的函数UpdateString时,一定要注意更新的是字符串,需要注意传入String参数的格式,是要字符串格式的,还是普通的字符数组就可以,这是不一样的。

一定要重视这一点,这直接决定了debug的效率。而且以后又碰到任何更新string的数据的时候,均要去查看,形参中传入的指针是否是一个字符串指针,如果是的话,那么在获取该数据时,一定要注意最后一个Byte要为'\0',否则就会发生越界的问题。本次调试就遇到了这样的问题。

我将形参指针的指向的空间放置了要更新的字符串数据,但是没有按照字符‘\0’结尾,

如上代码,仅申请了空间,copy了字符串数据,没有以'\0'结尾,但实际上结果错误,一直在我发现到UpdateString函数中,对于字符串长度的获取是通过'\0'来判断结尾的,我才意识到问题所在。

而后我在CopyMem数据,将最后一个数据设置成了'\0',UpdateString成功。这是个经验也是个教训,以后在碰到有关字符串的数据处理时,一定要提前看是否将其作为字符串来处理的。

【UEFI】---记录一次debug过程中的调试经验的更多相关文章

  1. Debug过程中的mock (及display窗口的使用)

    转载:http://m.blog.csdn.net/blog/u012516903/18004965 在debug的时候,有3个地方可以进行mock测试 测试代码如下: 1.使用display窗口 W ...

  2. 记录visual Studio使用过程中的两个问题

    Visual Studio是Windows平台下进行项目管理和开发的终极利器.除了微软自家的技术外,新版的VS不但支持Javascript, Python的开发调试,甚至还支持了Android, iO ...

  3. 如何在Eclipse和Tomcat的Debug过程中启用热部署

    参考的地址是 http://blog.redfin.com/devblog/2009/09/how_to_set_up_hot_code_replacement_with_tomcat_and_ecl ...

  4. dubbo debug过程中一个有趣的问题

    最近在debug dubbo代码过程中遇到的很有趣的问题 我们都知道dubbo ReferenceBean是消费者的spring bean包装,为了查一个consumer端的问题,在Reference ...

  5. ios逆向过程中lldb调试技巧

    在ios逆向过程中,善于运用lldb,会给逆向带来很大的方便 一般的命令: 1.image list -o -f  看看各个模块在内存中的基址 2.register read r0  读取寄存器r0的 ...

  6. vue生命周期updated的触发时机之debug过程中发现的firefox问题

    现象描述: 断点位置1 谷歌debug的过程: 火狐debug的过程: 只要在改变数据之后有断点停顿,就会先去执行updated函数 断点位置2 此时火狐和谷歌是一样的效果,但是执行顺序是不一致的 谷 ...

  7. 记录自己运行eShopOnContainers过程中遇到的坑

    由于各种各样的问题,依照官方文档运行eShopOnContainers项目遇到了好多莫名其妙的错误. 好在最后都解决了,在此记录,以防自己以后再遇到,也为遇到同样问题的同学提供参考. 参考的官方文档 ...

  8. IDEA Debug过程中使用Drop Frame或Reset Frame实现操作回退

    大家在Debug程序的时候,是否遇到过因为"下一步"按太快,而导致跳过了想要深入分析的那段代码?是不是很想要有"回到上一步"这样的操作呢? 在IDEA中就提供了 ...

  9. 记录下安装ES过程中遇到的错误及解决

    1.集群配置 需要修改 cluster.name .node.name .network.host: 0.0.0.0[此处默认localhost].http.port: 9200 只要集群名相同,且机 ...

随机推荐

  1. 2018-2-13-WPF-DelegateCommand-出现Specified-cast-is-not-valid

    title author date CreateTime categories WPF DelegateCommand 出现Specified cast is not valid lindexi 20 ...

  2. java抽象类的体现-模板模式

    抽象类是多个具体子类抽象出来的父类,具有高层次的抽象性;以该抽象类作为子类的模板可以避免子类设计的随意性; 抽象类的体现主要就是模板模式设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行拓展 ...

  3. Laravel基本使用、生成Cookie、返回视图、JSON/JSONP、文件下载及重定向

    https://yq.aliyun.com/ziliao/23889 1.Response篇 1.1 基本响应 最基本的HTTP响应只需在路由闭包或控制器动作中返回一个简单字符串即可,但是具体业务逻辑 ...

  4. H3C RIP路由表的更新

  5. P1002 Hello,World!

    题目描述 输出"Hello Wolrd!". 输入格式 无. 输出格式 输出一行"Hello World!". 样例输入 无. 样例输出 Hello World ...

  6. H3C 静态聚合配置

  7. Openstack生产环境部署(一)

  8. 【Kubernetes】部署K8s-dashboard v1.10.1

    一.官方kubernetes-dashboard.yaml简介 ①首先认识一下官方的kubernetes-dashboard.yaml,我们先下载: https://github.com/kubern ...

  9. C++Review3_关于C++各种概念的串联与梳理

    经过前面两个Review,对代码复用,类的继承概念有了进一步理解. 这里再做一次复盘,把其他概念也串联起来构成一个知识框架. 首先是类和对象的概念.对象指的是特征与技能的结合体,面向对象编程思想的好处 ...

  10. struts2生成随机验证码图片

    之前想做一个随机验证码的功能,自己也搜索了一下别人写的代码,然后自己重新用struts2实现了一下,现在将我自己实现代码贴出来!大家有什么意见都可以指出来! 首先是生成随机验证码图片的action: ...