内存管理

内存问题
   缺乏正确的工具的对于定位内存问题是非常困难的。在这一部分你将
简要的浏览两个方法来分析者内存问题。
   使用Libc Debug模式
   使用这模拟器,这libc debug模式被开启在定位内存问题。为了开启
libc调试模式,使用如下命令:
   adb shell setprop libc.debug.malloc 1
   adb shell stop
   adb shell start
被支持的libcdebug模式值如下:
   1:执行内存泄露检测
   5:填充已经分配的内存侦测到过度使用,越界
   10:填充内存和增加sentinel来侦测越界
为了看到LIbc debug模式,使用Eclipse,打开hello-jni.c源文件。
修改本地函数,如下:
   jstring
   Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
   jobject thiz )
  {
     char* buffer;
     size_t i;
     buffer = (char*) malloc(1024);
     for (i = 0; i < 1025; i++)
        {
             buffer[i] = 'a';
         }
     free(buffer);
     return (*env)->NewStringUTF(env, "Hello from JNI !");
}
你将分配1024字节,但是代码被修改一个额外的字节超出了分配的尺寸,
引发了内存问题。开启libc debug模式通过使用命令如下:
   adb shell setprop libc.debug.malloc 10
   adb shell stop
   adb shell start
建立和运行应用程序在模拟器上。当应用程序开始,点击Call本地代码
来触发本地函数。如下,libc debug模式展示一个警告消息关于内存
问题在logcat和终止执行。
为了进一步内存分析。对于内存调试一个打开的源码工具,内存泄露
侦测和profiling。对于这次实例,下载prebuilt valgrind二进制来自
本书的网站或者你建立它在你的机器上。如果你喜欢建立它,跳到
“Build from Source Code”部分。
使用预建立二进制:
   使用下载http://zdo.com/valgrind-arm-emulator-3.8.0.zip
建立从源代码:
对于Android为了正确建立Valgrind,你将需要一个Linux系统。Valgrind
是Android所支持的。下载最新的Valgrind在http://valgrind.org/
downloads/current.html.使用命令解压:
   tar jxvf valgrind-3.8.0.tar.bz2
基于解压的valgrind源代码,使用你的编辑器,打开README.androd文件
直到建立名领的日期。因为你将使用Valgrind在一个Andoid模拟器,确保
设置HWKIND到模拟器,使用:
export HWKIND=emulator
发布Valgrind到模拟器:
   Valgrind需要首先被不在到模拟器上。为了做着,打开Cygwin或一个
windows的终端,和进入你解压的zip文件的根目录,和使用如下命令行:
   adb push Inst /
   这将布置这Valgrind文件到/data/local/Inst目录在模拟器上。基于
发布的文件到设备,这执行的字节应该被修订。为了这,使用下面的命令:
   adb shell chmod 755 \
       $(find Inst -type f -exec file{} \;|\
              grep executable |\
              sed -n -e 's/^Inst\([^:]*$/\1/gp'|\
              xargs);
Valgrind封装
对于Valgrind目录,一个帮助脚本需要的。使用Eclipse或者你喜欢的编辑器
创建一个valgrind_wrapper.sh的新文件带有内容如下:
   #!/system/bin/sh
   export TMPDIR=/sdcard
   exec /data/local/Inst/bin/valgrind --error-limit=no $*
修订这封装的脚本的行尾,发布它到模拟器,和授权可以执行命令权限通过xiam
的命令:
    dos2unix.exe valgrind_wrapper.sh
    adb push valgrind_wrapper.sh /data/local/Inst/bin
    adb shell chmod 755 /data/local/Inst/bin/valgrind_wrapper.sh
运行Valgrind:
   为了在Valgrind下运行应用程序,插入wrapper脚本到开启序列通过如下
命令:
    adb shell setprop wrap.com.example.hellojni \
    "logwrapper /data/local/Inst/bin/valgrind_wrapper.sh"
    这个key的格式是wrap.<package name>.为了运行你的其他的
应用程序在Valgrind下,仅仅使用恰当的值代替包名。阻止和重启
应用程序。Valgrind消息在logcat上被展示,如下:
   Strace:
 在没有附加一个debugger或增加数量的日志消息的情况下,可能想
监视你的应用程序的每个活动。这个strace工具被用来很容获得。它
是非常有用的诊断工具因为它阻止和记录了系统调用。每个系统调用的
名字,它的参数,和它的返回值被输出。使用Android模拟器的strace。
    为了看到strace运行,使用Eclipse,打开着hello-jnil.c源代码。
修改源文件如下:
    #include <unistd.h>
...
jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz ) 
   {
     getpid();
     getuid();
      return (*env)->NewStringUTF(env, "Hello from JNI !");
   }
建立和运行应用程序在模拟器上。打开Cygwin或者一个终端。当应用程序
开始,使用如下命令:
    adb shell ps|grep com.example.hellojni
 使用如下命令来附加strace到运行的应用程序进程。
     adb shell strace -v -p <Process ID>
正如你看到的,strace将附加到应用程序进程和它将拦截和打印系统调用
使用它们的参数和返回值。点击调用本地按钮来触发本地函数,和trace
将会展示两个系统调用被引入本地代码,如下:
    
Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值