调试Bochs在Linux Mint下面symbol not found的问题
在我的Linux Mint上使用Bochs时出现了很奇怪的问题,按照http://www.cnblogs.com/long123king/p/3568575.html步骤
会提示:
symbol not found
因此,我决定使用gdb调试Bochs找出究竟发生了什么奇怪的问题。
1. 如何配置.conf.linux
添加-g -O0到CFLAGS/CXXFLAGS
2. 重新生成bochs程序
sudo make bochs
3. 参考:http://code.google.com/p/stl-debug/
添加对STL容器的调试支持
调试:
sudo gdb --args ~/latest_bochs/bochs/bochs -q -f bxrc_custom -rc script_debug_custom
4. 添加如下代码:
symbol_entry_t* context_t::get_symbol_entry(const char *symbol) const
{
if (m_rsyms.empty())
return 0; symbol_entry_t probe(0, symbol);
rsym_set_t::const_iterator iter;
for (std::set<symbol_entry_t*, lt_rsymbol_entry_t>::iterator it = m_rsyms.begin();
it != m_rsyms.end();
it++)
{
unsigned long start = (*it)->start;
char* name = (*it)->name;
if (strncmp(name, "start_kernel", strlen("start_kernel")) == 0)
{
int kkk = 0;
}
dbg_printf("0x%08X : %s\n", start, name);
continue;
}
iter=m_rsyms.find(&probe);
if(iter==m_rsyms.end()) // No symbol found
return 0;
return *iter;
}
++sym_name; char *ending = (sym_name + strlen(sym_name) - 1);
while ( isspace(*ending) && ending != sym_name)
{
*(ending--) = '\0';
} symbol_entry_t* sym = new symbol_entry_t(addr + offset, sym_name);
在int kkk=0;这一行设置断点,发现:
Breakpoint 1, context_t::get_symbol_entry (this=0x2860cf0, symbol=0x2860cd0 "start_kernel") at symbols.cc:213
213 int kkk = 0;
(gdb) info locals
kkk = 0
start = 3246113809
name = 0x3155e30 "start_kernel\r"
it = {_M_node = 0x3155e80}
probe = {name = 0x2536e70 "start_kernel", start = 0}
iter = {_M_node = 0x0}
怎么会多了一个"\r"呢,相信这就是问题的所在。
在add_symbol处设置断点,重新调试
Breakpoint 2, context_t::add_symbol (this=0x2860cf0, sym=0x2860fa0) at symbols.cc:226
226 m_syms.insert(sym);
(gdb) print sym.start
$1 = 0
(gdb) print sym.name
$2 = 0x2860fc0 "VDSO32_PRELINK\r"
(gdb)
确认问题。
解决方法:
在bx_dbg_symbol_command函数中添加如下代码:
++sym_name;
char *ending = (sym_name + strlen(sym_name) - 1);
while ( isspace(*ending) && ending != sym_name)
{
*(ending--) = '\0';
}
symbol_entry_t* sym = new symbol_entry_t(addr + offset, sym_name);
调试Bochs在Linux Mint下面symbol not found的问题的更多相关文章
- Linux Mint下编译Bochs
我在Linux Mint命令行下输入sudo apt-get install bochs安装之后发现这个没有安装gui界面,使用也存在一些问题,所以直接删掉从官网下载代码自己编译安装. 给Linux ...
- Linux mint xfce 19 使用记录
创建系统快照 创建系统快照是 Linux Mint 19 的重要建议,可以使用与更新管理器捆绑的 Timeshift 应用程序轻松完成创建与恢复. 这个阶段很重要,万一出现令人遗憾的事件,比如安装破坏 ...
- 在Linux Mint上安装node.js和npm
1.安装Node.js 前端开发过程中,很多项目使用npm的http-server的模块来运行一个静态的服务器,我个人在Dell的笔记本上安装的是Linux Mint最新版本,所以想尝试一下在Linu ...
- 在Ubuntu和Linux Mint上安装Oracle JDK
在Ubuntu和Linux Mint上安装Oracle JDK 使用下面的命令安装,只需一些时间,它就会下载许多的文件,所及你要确保你的网络环境良好: sudo add-apt-repository ...
- 安装Linux Mint
1.尽量选择trusty的安装版本,kde和xfce不支持Win+..快捷键,推荐cinnamon:制作安装U盘后,选择非EFI模式启动:选择start Linux Mint(就是第一项): 2.In ...
- Linux Mint 17使用小结
用过蛮多的linux系统 linux mint是我比较喜欢和常用的一个系统,装的是linux mint xfce 64位版本,在这里记录使用中遇到的一些问题及解决的方法,备忘,方便以后查看. 1.首先 ...
- Linux mint 18版本开启SSH服务
linux mint 18版本默认是没有安装ssh server的 需要手动安装 安装ssh server: 此命令需要联网,会自动下载安装 安装之后看是否开始了ssh, 看到ssh-agent 和s ...
- Linux mint 14输入法问题
新安装了Linux mint 14,莫名其妙地没有了中文输入法,安装并设置IBUS为默认输入法,但怎么也没反应.点击输入法图标,上面显示“No input window”,其实这不关输入法自身程序和设 ...
- linux mint 崩溃
换完linux mint 今天突然崩溃了.出现如下错误 因为是双屏.一个屏幕显示一般,这么不重要.搜了一下,找到解决方案 解决办法 ctrl+atl+f1 login sudo apt-get ins ...
随机推荐
- ASP.NET Core学习——6
依赖注入DI ASP.NET Core的底层设计支持和使用依赖注入.ASP.NET Core应用程序可以利用内置的框架服务将它们注入到启动类的方法中,并且应用程序服务能够配置注入. 1.什么是依赖注入 ...
- HTML-参考手册: HTML 音频/视频
ylbtech-HTML-参考手册: HTML 音频/视频 1.返回顶部 1. HTML 音频/视频 DOM 参考手册 HTML5 DOM 为 <audio> 和 <video> ...
- MySQL高级学习笔记(二):mysql配置文件、mysql的用户与权限管理、mysql的一些杂项配置
文章目录 mysql配置文件 二进制日志log-bin 错误日志log-error 数据文件 两系统 Myisam存放方式 innodb存放方式 如何配置 mysql的用户与权限管理 MySQL的用户 ...
- git 关于commit命令的修改
1 修改最后一次提交的信息 git commit --amend 2 对于历史提交 git rebase -i HEAD~5 没毛病,
- Java中的宏变量,宏替换详解。
群友在微信群讨论的一个话题,有点意思,特拿出来分享一下. 首先来看下面这段程序,和群友分享的大致一样. public static void main(String[] args) { String ...
- leetcode.数组.565数组嵌套-Java
1. 具体题目 索引从0开始长度为N的数组A,包含0到N - 1的所有整数.找到并返回最大的集合S,S[i] = {A[i], A[A[i]], A[A[A[i]]], ... }且遵守以下的规则.假 ...
- Codeforces 490D Chocolate
D. Chocolate time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- Hibernate4教程六(2):基本实现原理
整体流程 1:通过configuration来读cfg.xml文件 2:得到SessionFactory 工厂 3:通过SessionFactory 工厂来创建Session实例 4:通过Sessio ...
- element ui step组件在另一侧加时间轴显示
这是我开发的时候遇到的一个问题:项目需要在步骤条(竖直方向)的另一侧加时间显示,但是我在element ui 的step组件中一直没找着设置方法,所以就自己想了个办法加进来,效果如下: 代码如下,先上 ...
- 在MyEclipse中更换或修改svn的用户名和密码
1.通过删除SVN客户端的账号配置文件 (1)找到我们使用的客户端配置文件,Windows XP中的位置是在系统盘的Documents and Settings\Administrator\A ...