有人有关于 C 语言设计和错误跟踪/控制系统的好指南吗?

2024-04-23

我是 C 开发的软件工程方面的新手;有没有人有关于如何为 C 项目(尤其是嵌入式)设计错误跟踪或错误控制系统的良好指南?谈论 C 库的错误跟踪也会有帮助。


根据我的经验,这里的策略分为几个阵营。

  • 全局变量ala的使用errno http://www.cplusplus.com/reference/clibrary/cerrno/errno/。其工作原理本质上是任何函数都可以在全局变量中存储错误代码,因此在执行该函数后,您可以读取错误代码以查看它是否正确执行。在多线程环境中工作时,存在一些明显的问题。虽然它appears http://www.unix.org/whitepapers/reentrant.htmlPOSIX.1c 指定了该问题的解决方案。

  • 让每个函数返回一个错误代码。例如:

    RESULT_CODE my_function(int param1, int param2);
    
    RESULT_CODE error_code = my_function(10, 2);
    

这种方法的问题是您失去了直接从函数返回值的能力。

  • 每个函数都有一个额外的参数来存储结果代码。例如:

    void my_function(int param1, int param2, RESULT_CODE *err);
    
    RESULT_CODE error_code;
    my_function(10, 2, &error_code);
    switch (error_code)
    {
        case RESULT_OK:
            // all OK
            break;
        case RESULT_NO_MEM:
            // out of memory
            break;
        // etc...
    }
    

我已经看到这种方法在商业 RTOS 中成功使用,并且个人更喜欢它,因为我发现它的限制最少。唯一的潜在缺点是,即使您不关心结果,您也必须显式声明一个变量来存储错误代码。不过,从某种意义上说,我实际上有点喜欢这个要求,因为它迫使您不断思考如何处理错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有人有关于 C 语言设计和错误跟踪/控制系统的好指南吗? 的相关文章

  • 在opencv中保存帧而不压缩

    我正在尝试使用写 OpenCV 函数 我想保存帧 TIFF扩大 我遇到的问题是保存的图像被压缩 所以我无法使用它们 知道如何摆脱这种压缩吗 提前致谢 不要介意西奇说的话 TIFF 标志通过 LZW 压缩硬编码在 opencv 二进制文件中
  • 获取 WSA 错误代码的格式化消息

    我在 win32 C 应用程序中使用winsock2 我将使用 MessageBox 显示可以通过调用 WSAGetLastError 检索的网络错误 我怎样才能做到这一点 我看到 FormatMessage 但我不明白如何使用它 例如 以
  • 如何解决“HTTP 错误 404.3 - 未找到”错误?

    简单的问题 我启动 VS2008 并创建一个新的 WCF 服务应用程序 这将创建一个默认应用程序 并使用一些测试方法来显示它的工作原理 我按 CTRL F5 确实有效 伟大的 但是 它使用 Visual Studio 开发服务器 我不想支持
  • 是否有一种快速替代方法可以从 XNA 中的位图对象创建 Texture2D?

    我环顾四周 发现从位图创建Texture2D的唯一方法是 using MemoryStream s new MemoryStream bmp Save s System Drawing Imaging ImageFormat Png s S
  • Windows Server / Datacenter:设置 CPU 关联性 > 64 个核心

    SetThreadAffinityMask 允许为 64 个逻辑核心 处理器 设置关联掩码 但是 Windows Datacenter 最多可以有 64 个 CPU 每个 CPU 都有多个内核 请参阅here http social tec
  • 如何让我的方法等待所有线程完成?

    我有一个方法可以触发线程来完成一些工作 将有 2 个线程异步运行一段时间 当调用它们的回调方法时 回调会触发另一个线程 直到所有工作完成 如何让我的方法等待所有这些线程完成并被触发 如果这是 Net 4 0 您可以使用CountdownEv
  • Linux 缓冲区溢出环境变量

    我一直在审查不同类型的缓冲区溢出 并遇到了一个我不记得为什么会发生的问题 下面的代码是我尝试执行缓冲区溢出的程序 include
  • 将 MyGeneration 与 Fluent NHibernate 结合使用

    我在这里找到了一个使用 MyGeneration 生成 NHibernate 代码的绝佳模板 http vucetica blogspot com 2009 01 nhibernate template for my Generation
  • 如何在 Xamarin.Forms 中强制使用浅色模式?

    我的应用程序的 UI 设计为在灯光模式下使用 但如果手机的默认主题是深色模式 我的应用程序也会切换到深色模式 并且 UI 看起来很垃圾 所以我想强制我的应用程序使用灯光模式 我怎样才能做到这一点 In my app xaml我使用的文件Us
  • 以 ASCII 字符串形式获取 MemoryStream 内容的快速方法

    我在 MemoryStream 中有一个 JSON 字符串 我使用以下代码将其作为 ASCII 字符串获取 MemoryStream memstream new MemoryStream Write a JSON string to mem
  • 如何设置属性选择器的值 Expression>

    我需要使用模式工厂的想法将 Person 类实体中的实体属性 Address 与 FactoryEntities 类中的表达式 linq 相关联 看看这就是我所拥有的并且我想要做的 Address address new Address a
  • 这个对象的内存会是什么样子?

    我想知道这个类 它的对象 的内存布局是什么样的 class MyClass string myString int myInt public MyClass string str int i myString str myInt i MyC
  • 将 size_t 变量添加到指针

    我想向指针添加 size t 类型 有些像这样 void function size t sizeA size t sizeB void pointer pointer malloc sizeA pointer pointer sizeB
  • 如何对具有无效值的属性使用 JSON.net 的默认值

    我正在使用 Newtonsoft JSON 库来反序列化来自 Web 服务的响应 问题是某些字段包含无效值 例如 一条记录上的一个字段包含一个 T 表示该字段应该是数字 我想做的是将无效字段的值设置为 null 或其他默认值 我的所有属性都
  • 委托:方法名称预期错误

    我正在尝试让以下简单的委托示例正常工作 根据我从中取出的一本书 应该没问题 但我得到了Method name expected error namespace TestConsoleApp class Program private del
  • 如何获取 TFS 2013 中所有用户的列表

    我正在使用 Team Foundation Server TFS 2013 和 Visual studio 2012 我需要 TFS 中所有用户的列表 有没有办法使用C 获取TFS中的所有用户 从TFS 2010获取用户列表 您可以尝试使用
  • 枚举和枚举类之间的区别[重复]

    这个问题在这里已经有答案了 谁能解释一下两者之间的区别 enum Type1 type2 And enum class Type1 type2 我经常使用前者 可能太频繁而没有足够的封装 但我从未使用过第二个例子 Thanks enum A
  • 二叉树实现C++

    二叉树插入 include stdafx h include
  • GridView,在代码中添加标题行第 2 部分

    这是这篇文章的延续 但添加了完整的代码 ASP NET GridView 在代码中添加标题行 https stackoverflow com questions 19119004 asp net gridview adding header
  • 如何在 C++ 中打印变量的名称? [复制]

    这个问题在这里已经有答案了 可能的重复 在C中获取变量名称的编程方法 https stackoverflow com questions 1623111 programmatic way to get variable name in c

随机推荐

  • Java EE 身份验证:如何捕获登录事件?

    给定为 Java Web 应用程序定义的 FORM 类型的身份验证机制 如何捕获已执行登录在重定向到请求的资源之前发生事件 是否有任何类型的侦听器可以让我在用户登录时执行我的代码 我觉得定义过滤器不是最好的解决方案 因为过滤器链接到资源 即
  • PHP:使用strlen获取远程文件大小? (html)

    我正在查看 fsockopen 之类的 PHP 文档 他们说你不能在远程文件上使用 filesize 而不用 ftell 或其他东西做一些疯狂的事情 不确定他们到底说了什么 但我有一个很好的想法怎么做 file file get conte
  • setInterval() 只运行一次函数

    我想定期查询 PHP 脚本以获取新消息 为此 我使用 setInterval 函数和 AJAX document ready function var queryInterval 1000 How fast we query for new
  • C++ 类方法的 LD_PRELOAD

    我需要在 C 程序中插入方法调用 该类驻留在单独的共享库中 我以为我可以使用 LD PRELOAD 但我不确定这将如何工作 我只找到了 C 函数的示例 是否有一种方法可以为单个方法设置插入 而无需从插入的类实现中复制任何代码 只需为插入的代
  • OpenGL NURBS 曲面

    我正在学习 OpenGL 我想要一个中间有轻微驼峰的表面 我目前正在使用这段代码 但我不确定如何调整 ctrl 点以使其达到我想要的方式 它目前就像 我想要这样的 我不完全确定我应该使用哪些控制点 并且我对其工作原理感到困惑 include
  • Microsoft Cognitive API 不断告诉我:“消息”:“输入数据不是有效的图像或受密码保护。”

    我有图像的 base64 字符串 我正在尝试将其转换为 应用程序 八位字节流 因为这就是 api 所需要的 我认为我已经通过创建一个 blob 来做到这一点 正如您从我的函数中看到的那样 当我进行 api 调用时 我不断收到标题中的消息 有
  • 如何通过 JOIN 组合(合并)相似的列以删除 NULL

    问题简介 我有一个名为 客户 的超类表和两个从客户继承的名为 个人 和 公司 的子表 因此 客户实体与 人 或 公司 具有一对一的关系 客户只能是 个人 或 公司 但不能同时是两者 如下所示 Customer Person Company
  • 可以用excel引用外部宏吗?

    我有一个相当复杂的宏 需要在多个不同的 Excel 工作表上运行 该宏会定期更新 并且每当进行更改时 都需要在每个单独的 Excel 工作表中进行更改 有没有一种方法可以让每个Excel文档引用一个宏 例如 如果我有这样的层次结构 DOCU
  • Azure AD - 获取用户的个人资料照片,OAUTH 访问失败

    我正在尝试在使用 EWS 连接到 Office 365 的电子邮件应用程序的上下文中访问登录用户的个人资料照片 该应用程序已在 Portal azure com 上注册 并具有以下所需权限 Office 365 Exchange Onlin
  • 如何将图标放入自定义对话框的标题中

    我想将一个可绘制对象放入对话框标题栏中 我尝试了以下方法 final Dialog dialog new Dialog this dialog requestWindowFeature Window FEATURE LEFT ICON di
  • 带有身份的 ASP.NET Core 2.0 中的 Cookie 过期

    环境 ASP NET Core 2 0 带有cookie的身份 In Startup ConfigureServices 有这样的 services ConfigureApplicationCookie options gt options
  • TikTok 登录套件:非法重定向链接

    我正在看新的TikTok 登录套件对于网络 我陷入了重定向步骤 与所有基于 oAuth 的服务类似 当您注册应用程序时 它们应该要求提供有效的重定向 URL 对于 TikTok 他们要求重定向域 如下所示 然后根据他们的官方文档 https
  • Laravel 5.1 失败的排队作业在 failed() 方法上失败,阻止调用队列失败事件处理程序

    我正在测试 Laravel 5 1 中的队列功能 我可以让作业在我的数据库表中排队 称为作业 并且可以让它们成功运行 我还创建了一个名为 failed jobs 的队列失败表 为了测试它 在作业表中 我操作有效负载数据以使其失败 然后像这样
  • Swift:递归值类型

    我有一个结构 我想在其中有一个 Struct 类型的全局变量 这个例子本质上是我实际创建的结构的简短版本 struct SplitString splits a string into parts before and after the
  • 正则表达式中的顺序不重要吗?

    我正在查看此 stackoverflow 链接中提出的问题 奇数个 a 的正则表达式 https stackoverflow com questions 28902496 regular expression for odd number
  • ZMQ 模式经销商/路由器心跳

    我在客户端有一个经销商套接字 它连接到服务器端的路由器套接字 我经常看到心跳机制 服务器定期向客户端发送消息 以便客户端知道自己是否正确连接到服务器 以便客户端在一段时间内没有收到消息时可以重新连接 例如这里的偏执海盗模式 http zgu
  • 在 Aurelia 中,我可以绑定包含视图模型中的函数以供自定义元素调用吗?

    我有一个自定义元素 它将接受用户输入 并且在单击 保存 按钮时 我想将信息传递给父视图模型 以便我可以将其发送到服务器并移至下一部分 例如 我将简化这一点 my element js import customElement bindabl
  • 如何从另一个块访问块状态中的数据

    我正在使用 Bloc 模式开发 Flutter 应用程序 认证成功后 UserSate就有了User对象 在所有其他 Bloc 中 我需要访问 UserState 中的 User 对象 我尝试在其他 Bloc 的构造函数参数上获取 User
  • React-testing-library - 屏幕与渲染查询

    有两种使用查询的方法react testing library https testing library com docs react testing library intro 您可以使用返回的查询render https testin
  • 有人有关于 C 语言设计和错误跟踪/控制系统的好指南吗?

    我是 C 开发的软件工程方面的新手 有没有人有关于如何为 C 项目 尤其是嵌入式 设计错误跟踪或错误控制系统的良好指南 谈论 C 库的错误跟踪也会有帮助 根据我的经验 这里的策略分为几个阵营 全局变量ala的使用errno http www