首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS: ARM64不定函数传参问题调试剖析

本文从实际开发中遇到的一个平台相关的crash问题出发,通过代码对比,研究了在x86-64架构和ARM64架构对于不定函数参数传递的方式——特别是iOS系统的不同之处,同时也解答了为什么在调用带不定参数类型的...---- crash发生在objc_storeStrong函数中,猜测是ARC(自动引用计数)下导致的问题,尝试将process_blackhole方法的参数类型修改为void *或id __unsafe_unretained...通过汇编单步调试发现上述crash属于访存错误,objc_retain调用传入了一个堆栈上的地址。这很奇怪,按理说传入的应当是该方法的实参对象——一个堆中的地址,指向一个合法对象。...:-P 测试代码 该部分编写了三段测试代码,根据编译出的汇编指令,发现了以下问题: 1.直接调用参数列表含有不定参数的函数指针: x86-64架构下参数传递都正常,但在ARM64架构下,调用一个参数时,...,其中不定参数函数只将固定参数的参数按照ARM64 ABI处理,而所有的变参则会依次压栈 ---- 以下问题真机环境只考虑ARM64(iPhone 5s及以后的设备),也即AArch64执行态的ARMv8

2.5K33

【STM32F407开发板用户手册】第1章 初学STM32F407的准备工作

1.8 STM32F407调试方法 1.9 STM32F407出现硬件异常的解决办法 1.10总结 1.1   初学者重要提示   关于学习方法问题,可以看附件章节A。  ...勘误手册(Errata Sheet) 描述了芯片某些功能的局限性,并给出解决办法。这个手册也比较重要,有时候我们觉得有些地方调试老是出问题,就需要查找一下,看看是否是硬件bug。  ...针对我们这个教程来说,当前还用不到这些东西,主要用到CMSIS软件包里面的如下头文件即可(不同版本,截图中的文件可能不同,这个软件包是一直在更新中的,下面的截图的版本是V5.5.1): 这个软件包可以在三个地方获取...1.8   STM32F407调试方法 STM32F407的调试方法主要分为两大类:   MDK和IAR编译器自带的调试 MDK调试方法在第5章进行了详细讲解。...1.9   STM32F407出现硬件异常的解决办法 大家做项目时,经常会遇到硬件异常问题,所以专门为此做了一个章节(具体在11章节进行了详细讲解)。

6K25
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何调试Kubernetes集群中的网络延迟问题?

    在这篇文章中,我们将聊一聊我们是如何追踪定位到这个问题的。 — 1 — 拨开迷雾找到问题的关键 我们想用一个简单的例子来复现问题,那么我们希望能够把问题的范围缩小,并移除不必要的复杂度。...起初,数据在 Vegeta 和 Kubernetes Pods 之间的流转的过程中涉及了太多的组件,很难确定这是不是一个更深层次的网络问题,所以我们需要来做一个减法。...这似乎在告诉我们,是接收的网卡队列的哈希在“开玩笑”,我们几乎确定停顿是发生在接收端处理 RX 包的过程中,而不是发送端的问题。...以上所说的“挂载到内核的任意函数上”实际上是一个难点,但它已经尽可能地做到被安全使用,因为它本身就是设计来为了追踪这类生产环境的问题,这些问题普遍无法简单地在测试环境或者开发环境中重现。...但这也没什么问题,当内核回收缓存中的最后一页内存时,cgroup 最终会被清理,因此这并不是一个“泄漏”。

    2.1K30

    大小端示例-arm c51

    MDK(Keil5,STM32F407)C语言: #include "stm32f4xx.h" int main(void) { int u = 367328153; // 原始数据...编译连接然后下载到开发板上,然后启动调试,通过监视窗口可以看到u的地址,然后在内存窗口可以看到字节序是反序的,所以说明STM32F407是小端的。...据某些资料说ARM内核是可以设置大小端的,但是STM32是外设自动进入了小端,似乎是无法调整的。 89C52(Keil5)C语言: 来一个大端的例子。手头上没有51的开发板,所以用的是软件仿真。...目前Intel的80x86系列芯片是唯一还在坚持使用小端的芯片,ARM芯片默认采用小端,但可以切换为大端;而MIPS等芯片要么采用全部大端的方式储存,要么提供选项支持大端——可以在大小端之间切换。...另外,对于大小端的处理也和编译器的实现有关,在C语言中,默认是小端(但在一些对于单片机的实现中却是基于大端,比如Keil 51C),Java是平台无关的,默认是大端。

    1.1K10

    Linux中的gdb调试

    1、背景 在Linux命令行中,我们还不知道怎么调试我们编写的代码。...Linux中gcc/g++出来的二进制程序,默认是release模式。 所以我们需要在gcc/g++的过程中需要加上一些指令。...disable n:关闭n号断点的效果 如果运行过程中突然不想运行了,或者换句话说是想要重新运行的话,就需要再输入一遍run命令 再选择y,就能够实现重新运行调试。...c (continue):实现断点间的跳跃运行 finish:直接执行完所在函数就停下来(逐函数运行) 如果写的一个函数里面有一个比较大的循环的话,我们进来运行几遍发现并没有什么问题,那我们进来了怎么出去呢...bt:查看调用栈 5、命令总结 对于基础代码还是很方便使用的,但是到后期的时候,调试大代码的时候可能就是会有一些难以解决的问题。

    15010

    我是如何调试 Webpack 问题的

    ,给了几个纸糊的建议还是解决不了问题,刚好在开会这事就暂且放下了。...Tips: ndb 是一个开箱即用的 node debugger 工具,不需要做任何配置就能调试 node 应用,非常方便 OK,答案揭晓了,在 ouput.publicPath = './' 场景下会命中这个中间件...== 0){ return false; } 讲道理,从字面意义上这个 url 应该是客户端发过来的请求连接,publicPath 应该就是我们在 webpack.config.js 中配置的 output.publicPath...但是,过程中确实用到了《如何阅读源码 —— 以 Vetur 为例》 提及的流程和技巧: 先明确定义目标 再回顾背景,了解关键知识点 再再定义切入点 再再再分析代码结构,猜测问题可能出在那 再再再再局部深入分析...,逐层解密直到问题的根源

    2.9K30

    ARM中的进程内存和内存破坏

    注:本位为简译文章,原文见最后的reference 进程的内存布局 程序载入内存会分成多个段,我们关心下面三个 程序空间 堆 栈 一般情况下布局如下 我们可以通过gef看到内存布局及权限 azeria@...nexti 2 -----------------------------------------------------------------------------------------[ code:arm.../libc-2.19.so <---- Shared library (libc) 0xb6f9f000 0xb6faf000 0x0012b000 --- /lib/arm-linux-gnueabihf...,导致可以覆盖LR寄存器的味道,通过精心地控制,即可达到任意代码执行的目的 我们用如下程序测试 /*azeria@labs:~/exp $ gcc stack.c -o stack*/ #include...,假如对name的输入没有限制,那么number也是我们可以控制的 汇编如下: 输入7个A 堆从0x00021000开始,结构如下,number还没被覆盖 但是我们输入8个A,那么number的最低位就被

    9010

    我是如何调试 Webpack 问题的

    ,给了几个纸糊的建议还是解决不了问题,刚好在开会这事就暂且放下了。...node debugger 工具,不需要做任何配置就能调试 node 应用,非常方便 OK,答案揭晓了,在 ouput.publicPath = './' 场景下会命中这个中间件,执行 serveIndex...== 0){ return false; } 讲道理,从字面意义上这个 url 应该是客户端发过来的请求连接,publicPath 应该就是我们在 webpack.config.js 中配置的 output.publicPath...值导致默认打开的路径与真正的 index 首页不一致,而且还没返回 「404」 一类通用的错误提示,取而代之以一个不明所以的「文件列表页」,开发者很难迅速 get 到问题到底出在哪 到这里就把问题从表象...但是,过程中确实用到了《如何阅读源码 —— 以 Vetur 为例》 提及的流程和技巧: 先明确定义目标 再回顾背景,了解关键知识点 再再定义切入点 再再再分析代码结构,猜测问题可能出在那 再再再再局部深入分析

    1.1K30

    EtherCAt总线运动控制_运动控制器ethercat

    目前,以嵌入式处理器为基础开发的数控系统主流架构形式有如下几种 [38,39] : ( 1 ) ARM+DSP 的架构:通过 DSP 的强大浮点计算能力来分担 ARM...(2) ARM +FPGA/CPLD 的架构:这种形式接口处理能力得到了有效的扩展,但是 插补算法及其他运算都由 ARM 来承担,如果 ARM 数据计算能力不足,控制系统的精...考虑到控制系统的实时性和灵活性的要求,选用 ST 公司生产的 STM32F407 为主控 芯片。...对于 FPGA 芯片的选择,首先得考虑到引脚资源以及接口电平是否和 STM32F407 相匹配,同时平台开发的成本、手册资料是否齐备等问题也是需要考虑的重要部分。...FPGA 除了与 STM32F407 进行通信外,还需要对步进电机及输入输出信号进行控 制,但是 FPGA 的驱动能力非常有限,并不能直接用于步进电机驱动器等的控制,需要 将电平进行转化

    86340

    【STM32F407的DSP教程】第7章 ARM DSP源码和库移植方法(IAR8)

    IAR的工程创建,下载和调试方法,在V6用户手册有详细说明:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 。...打开固件库里面的CMSIS文件,可以看到如下几个文件: 其中DSP文件夹是我们需要的: Examples文件夹中的文件如下,主要是提供了一些例子: Include文件夹里面是DSP库的头文件: Lib文件夹里面是...MDK(ARM),IAR和CGG版库文件: Projects文件夹里面的文件如下,提供了三个版本的工程模板,每个模板里面都是把所有源码文件添加了进来: Source文件夹中的文件如下,这个是DSP的源码文件...IAR的预定义选项中: 这里将这几个预定义宏做个介绍:  ARM_MATH_BIG_ENDIAN: 大端格式。  ...如果编译的是MDK的AC6工程,特别要注意本章7.7小节所说的问题。

    1.3K20

    Android调试中遇到的bug

    11 14:39:52.120: ERROR/AndroidRuntime(12051):     at java.lang.Thread.run(Thread.java:848) 错误原因是因为:输出的log...,返回来的键值和我optString的设置没有一致 09-11 15:33:04.697: WARN/dalvikvm(13180): threadid=13: uncaught exception occurred...09-11 15:36:35.759: WARN/System.err(743):     at dalvik.system.NativeStart.run(Native Method) 这个其实不是问题...,我也没有找到解决方案,但是我重新调试的时候就不报这个警告了  主要的原因估计还是我其他的地方错误了,listView的问题 今天好像又碰到了  我一开始学Android写listView的问题,就是创建一个...adapter类的时候只知道吧getView写了  而把那些getCount给掉了,最后程序也不报错,数据访问也没有问题,哎,跟踪了好久才发现这个问题, 我只想说一句  很多时候我们总是在不经意间回到原点

    59130

    某次调试中的通信杂谈

    JZGKCHINA 工控技术分享平台 尊重原创 勿抄袭 勿私放其他平台 前 言 本文记述了笔者在调试一个由上位机及PLC、空压机、干燥机、真空泵等组成的系统的通信时所遇到的一些问题,如果您在工作遇到以下品牌的设备...了解了网络结构后,介绍下笔者在调试中遇到的一些问题: 关于和Atlas空压机、干燥机的Modbus RTU通信 由于Atlas的Mk5网关是由厂家的技术人员按要求配置好的,所以通信比较顺畅,这里只说几个小的细节...关于和Edwards GXS干式真空泵的 Modbus TCP通信 几个细节问题: 通过真空泵上的控制面板,可以设定IP地址。...但是查询EDS-205的资料,发现其是支持Auto MDI/MDI-X 自动翻转功能的,所以这里不敢判断原因为何,只给大家列出,如有遇到类似问题可尝试下。...关于Emerson CPE305和Intouch的SRTP通信 几个细节问题: Intouch中需要在DASERVER里安装GESRTP驱动,然后新建设备即可。

    1.3K20

    VS2022中的调试

    前言: 在日益繁忙的工作环境中,选择合适的编程工具已成为提升开发者工作效率的关键。不同的工具能够帮助我们简化代码编写、自动化任务、提升调试速度,甚至让团队协作更加顺畅。...我们如果自己创建了一个变量,vs也是可以自动弹出,如: 报错和警告也同时具有,如果我们出现了语法问题,在对应的语法上下文就会出现对应的红色波浪线等: 警告方面比如,我们输入scanf,但是没有对返回值进行接受...这是日常使用部分,我们今天的重点是调试部分,因为日常编码部分我们是可以快速检查,通过快速跑读代码以及正常的报错是可以提高编码的速度的,但是一个程序的交付,还有看最终的调试部分,所以重点是调试。...: 左上角的就是Release,我们建议,调试的时候使用debug版本,因为release版本本来也不是调试的,而且如果将release作为调试的话,优化是比较严重的,并且在Vs2022的大体上,优化更重...咱们调试的时候,分为逐语句调试和逐过程调试,最直接的说就是经过一条函数调用语句的时候,会不会进入函数体。 F11是逐语句,我们平时可以直接使用F10或者F11进入调试,F10是逐过程。

    6710

    【安富莱】【RL-TCPnet网络教程】第11章 RL-TCPnet调试方法

    本章教程含STM32F407开发板和STM32F429开发板的调试方法说明。...由于Net_Debug.c文件中可以使能的选项较多,实际测试中使能太多的话,会打印出非常多的信息,完全看不过来,所以实际测试的时候最好需要调试哪些功能,就开启哪些选项。...11.2.1  添加调试版本的RL-TCPnet库和配置文件 KEIL官方提供的库有如下几个版本,路径C:\Keil_v474\ARM\RV31\LIB: ?...11.3 实验例程说明 11.3.1 STM32F407开发板实验 本章节仅仅是教会大家调试方法,具体实验内容还不做讲解,仅需学会调试功能的开启方法即可。...对于STM32F407开发板,本章节配套了如下几个例子(这些例子与前面移植章节的例子是一样的,仅仅是修改了配置文件,所以其它功能看前面移植章节的说明即可。

    67170

    调试 .NET Core 中的死锁

    终结点将停止响应并遇到线程累积问题。 你将了解如何使用各种工具来分析问题,例如核心转储、核心转储分析和进程跟踪。...在本教程中,你将: 调查已停止响应的应用 生成核心转储文件 分析转储文件中的进程线程 分析调用堆栈和同步块 诊断并解决死锁 先决条件 本教程使用: .NET Core 3.1 SDK 或更高版本 用于触发场景的示例调试目标...- Web 应用 用于列出进程的 dotnet-trace 收集和分析转储文件的 dotnet-dump 核心转储生成 为了调查应用程序无响应问题,核心转储或内存转储允许你检查其线程的状态以及任何可能存在争用问题的锁定状态...使用以下命令从示例根目录运行示例调试应用程序: dotnet run 若要查找进程 ID,请使用以下命令: dotnet-trace ps 注意命令输出中的进程 ID。...122184) 318 0x1DD49 (122185) 319 0x1DD4A (122186) 320 0x1DD4B (122187) 321 0x1DD4C (122188) 该输出显示进程中当前运行的所有线程及其关联的调试器线程

    75020
    领券