Ort*_*ntz 32 iphone debugging xcode malloc-history
我在iPhone应用程序中存在内存问题,我想调试它MallocStackLogging.错误涉及陀螺仪,所以我必须在设备上调试而不是模拟器.
我已经设置了MallocStackLogging环境变量,iPhone正确记录了mallock堆栈日志:
MyApp(1856) malloc: recording malloc stacks to disk using standard recorder
MyApp(1856) malloc: stack logs being written into /private/var/mobile/Applications/1FD1F8D2-5D30-4AA7-B426-C52FE20266DE/tmp/stack-logs.1856.MyApp.index
MyApp(1856) malloc: Please issue: cp /private/var/mobile/Applications/1FD1F8D2-5D30-4AA7- B426-C52FE20266DE/tmp/stack-logs.1856.MyApp.e8z3IL.link /tmp/
Run Code Online (Sandbox Code Playgroud)
现在我该如何使用它们?
我可以使用Xcode Organizer将它们传输到Mac.但是我应该怎么处理这两个文件呢?
我尝试在Mac上的/ tmp中移动文件并调用:
$ malloc_history 1856 -all_events
malloc_history cannot examine process 1856 because the process does not exist.
Run Code Online (Sandbox Code Playgroud)
显然,该malloc_history命令在本地计算机上查找正在运行的进程.我错过了手动指定日志文件的选项.
有没有办法让这个工作直接在(非越狱)设备上使用Xcode或将日志传输到Mac?
小智 5
这是我如何在 idevice 上使用 malloc 堆栈历史记录调试 APP,这确实很复杂,但我没有其他方法来处理自动释放池内存问题。
你需要一个安装了开发工具的越狱idevice,然后你就有了gdb。
要启用 malloc 堆栈日志记录,您需要设置环境变量 MallocStackLoggingNoCompact 和 MallocStackLogging,我们需要一些技巧来做到这一点。
首先,我们需要授予您的应用程序 root 权限。
mv -f /User/Application/xxxxxxxxxxxxx/YOUR_APP.app /Application/YOUR_APP.app
cd /Application
chown -R root:wheel YOUR_APP.app
chmod 4755 YOUR_APP.app/YOUR_APP
Run Code Online (Sandbox Code Playgroud)
重命名您的程序
mv YOUR_APP.app/YOUR_APP YOUR_APP.app/BACK_UP_NAME
Run Code Online (Sandbox Code Playgroud)
使用简短的 shell 脚本来启动您的程序,这样我们就可以保留环境。将其保存到 YOUR_APP.app/YOUR_APP
#!/bin/bash
export MallocStackLogging=1
export MallocStackLoggingNoCompact=1
exec /Applications/YOUR_APP.app/BACK_UP_NAME
Run Code Online (Sandbox Code Playgroud)
完毕。
只需启动您的应用程序,触摸图标或使用打开命令,您就会在 /tmp 目录中看到堆栈日志文件。
使用ps aux | grep YOUR_APP查找进程ID,gdb -p PROCESS_ID附加进度,下断点,尝试info malloc ADDRESS,malloc历史记录将显示。
| 归档时间: |
|
| 查看次数: |
9923 次 |
| 最近记录: |