在我的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的问题的更多相关文章

  1. Linux Mint下编译Bochs

    我在Linux Mint命令行下输入sudo apt-get install bochs安装之后发现这个没有安装gui界面,使用也存在一些问题,所以直接删掉从官网下载代码自己编译安装. 给Linux ...

  2. Linux mint xfce 19 使用记录

    创建系统快照 创建系统快照是 Linux Mint 19 的重要建议,可以使用与更新管理器捆绑的 Timeshift 应用程序轻松完成创建与恢复. 这个阶段很重要,万一出现令人遗憾的事件,比如安装破坏 ...

  3. 在Linux Mint上安装node.js和npm

    1.安装Node.js 前端开发过程中,很多项目使用npm的http-server的模块来运行一个静态的服务器,我个人在Dell的笔记本上安装的是Linux Mint最新版本,所以想尝试一下在Linu ...

  4. 在Ubuntu和Linux Mint上安装Oracle JDK

    在Ubuntu和Linux Mint上安装Oracle JDK 使用下面的命令安装,只需一些时间,它就会下载许多的文件,所及你要确保你的网络环境良好: sudo add-apt-repository ...

  5. 安装Linux Mint

    1.尽量选择trusty的安装版本,kde和xfce不支持Win+..快捷键,推荐cinnamon:制作安装U盘后,选择非EFI模式启动:选择start Linux Mint(就是第一项): 2.In ...

  6. Linux Mint 17使用小结

    用过蛮多的linux系统 linux mint是我比较喜欢和常用的一个系统,装的是linux mint xfce 64位版本,在这里记录使用中遇到的一些问题及解决的方法,备忘,方便以后查看. 1.首先 ...

  7. Linux mint 18版本开启SSH服务

    linux mint 18版本默认是没有安装ssh server的 需要手动安装 安装ssh server: 此命令需要联网,会自动下载安装 安装之后看是否开始了ssh, 看到ssh-agent 和s ...

  8. Linux mint 14输入法问题

    新安装了Linux mint 14,莫名其妙地没有了中文输入法,安装并设置IBUS为默认输入法,但怎么也没反应.点击输入法图标,上面显示“No input window”,其实这不关输入法自身程序和设 ...

  9. linux mint 崩溃

    换完linux mint 今天突然崩溃了.出现如下错误 因为是双屏.一个屏幕显示一般,这么不重要.搜了一下,找到解决方案 解决办法 ctrl+atl+f1 login sudo apt-get ins ...

随机推荐

  1. 二.通过jenkins对系统的监控(1)

    说明:通过jenkins定时请求系统,判断系统是否挂了. 注:windows环境 1.新建一个自由风格的项目. 2.构建触发器选择定时构建. 3.执行windows批处理命令 4.构建后操作,发邮件 ...

  2. sublime useful packages

    Package control Prefixr Emmet

  3. python学习笔记:操作Excle

    import xlwt #写excel import xlrd #读excel import xlutils #修改excel 一.写操作 1.写Excel import xlwt #写excel,导 ...

  4. html5中的拖拽功能

    拖拽元素支持的事件 ondrag 应用于拖拽元素,整个拖拽过程都会调用 ondragstart 应用于拖拽元素,当拖拽开始时调用 ondragleave 应用于拖拽元素,当鼠标离开拖拽元素是调用 on ...

  5. Java7任务并行执行神器:Fork&Join框架

    Fork/Join是什么? Fork/Join框架是Java7提供的并行执行任务框架,思想是将大任务分解成小任务,然后小任务又可以继续分解,然后每个小任务分别计算出结果再合并起来,最后将汇总的结果作为 ...

  6. 标准模板库(STL)学习探究之Multimap容器

    C++ Multimaps和maps很相似,但是MultiMaps允许重复的元素.(具体用法请参考map容器)     函数列表:     begin() 返回指向第一个元素的迭代器      cle ...

  7. tomcat配置报错解决方法 The jre_home environment variable is not defined correctly

    tomcat配置的时候弹出错误,The jre_home environment variable is not defined correctly,难道jre环境变量配置不正确?但是我们又可以执行j ...

  8. 【JDK1.8】Java 栈实现方式

    看到一道面试题,问Java中栈的实现方式,记录下一些实现细节. API中有5个方法,分别是: boolean empty() E peek() E pop() E push() int search( ...

  9. day09 python函数 返回值 参数

    day09 python   一.函数     1.函数         函数是对功能的封装         语法:         定义函数:             def 函数名(形参):    ...

  10. Django之Form操作

    一.Form基础 (一)Form的作用 Django的Form主要有以下几大作用: 生成HTML标签 验证用户数据(显示错误信息) Form提交保留上次提交数据 初始化页面显示数据 (二)实例 一般网 ...