Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7602
  • 博文数量: 4
  • 博客积分: 186
  • 博客等级: 入伍新兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-30 10:41
文章分类
文章存档

2013年(1)

2010年(3)

我的朋友
最近访客

分类: 嵌入式

2010-05-10 12:06:39

    经过几个月几个人的摸索(当然不是一直在解决这个问题),终于解决CodeBlocks不能调试Android Native C程序的问题,现共享一下,免得大家浪费时间(不过也不一定是浪费时间,因为这个过程也能学到不少东西)。

开发环境:
    Windows XP + Cygwin + Android NDK 1.6 + CodeBlocks8.02

问题描述:
    使用gdbserver和CodeBlocks调试时,直接运行没有问题,但若设定断点,CodeBlocks出现打开源代码文件失败的错误,并且不能定位到源代码文件的断点位置。
    另外CodeBlocks编译Android Native C程序没有问题,上传到模拟器或实机运行也没有问题,使用gdbserver和gdb调试也没有问题。

最终解决方案:
    运行如下脚本,在cygwin的安装目录下创建register.bat文件,把下面的内容拷入保存,单击执行。 

set "curpath=%cd%"
set "curpath=%curpath:\=\\%"
set "regname=register.REG"

if exist %regname% del %regname%

echo REGEDIT4>>%regname%
echo.>>%regname%
echo [HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin]>>%regname%

echo [HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2]>>%regname%
echo "cygdrive prefix"="/cygdrive">>%regname%
echo "cygdrive flags"=dword:00000020>>%regname%

echo [HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/]>>%regname%
echo "native"="%curpath%">>%regname%
echo "flags"=dword:00000008>>%regname%

echo [HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/usr/bin]>>%regname%
echo "native"="%curpath%\\bin">>%regname%
echo "flags"=dword:00000008>>%regname%

echo [HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/usr/lib]>>%regname%
echo "native"="%curpath%\\lib">>%regname%
echo "flags"=dword:00000008>>%regname%

echo [HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\Program Options]>>%regname%
regedit /s "%regname%"


问题的原因分析(调试CodeBlocks代码 + 猜测的结果):
1. 使用Android NDK提供的tool chain编译时,arm-eabi-g++.exe会把dos风格的路径转换成linux风格的路径。
2. 当程序运行到断点位置后gdbserver发回"0x20/cygdrive/..."的文件路径和行数。
3. CodeBlocks收到该文件路径后,试着打开该文件,这时它会到cygwin的注册表“HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2”项中查找mount表,对linux风格路径进行转换,若注册表中没有这一项,则转换失败,导致源代码文件打开失败,无法定位到源代码文件。
4. 根本原因(猜测),cygwin的安装程序在注册表中填写的数据不能满足CodeBlocks的需要导致上述问题。

参考:
http://blog.csdn.net/superbeck/archive/2008/11/05/3226709.aspx
阅读(1014) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-07-30 23:32:23

非常有用,谢谢!