OS X:在不关闭进程的情况下生成核心转储?

2024-02-08

我知道如何在进程崩溃时在 OS X 上生成核心转储,但我真正需要做的是附加到进程,生成核心转储,然后恢复该进程(而不杀死它)。

很久以前(也许一年半前)我有 C 代码可以做到这一点...它使用 OS X 内核库连接到一个进程,读取其所有线程状态和内存,并将其写入磁盘上的 Mach-O 文件。这非常有效(这正是我正在寻找的),但现在我似乎无法找到适合我一生的代码。我似乎记得代码与 OS X 系统内部原理书有些关系,但这只是一个模糊的回忆。

有谁知道我正在谈论的代码并可以指出我吗?如果没有,有人知道最好用一些示例代码来做到这一点的好方法吗?

编辑:这是答案。

信息:http://osxbook.com/book/bonus/chapter8/core/ http://osxbook.com/book/bonus/chapter8/core/

将为您做这件事的程序:http://osxbook.com/book/bonus/chapter8/core/download/gcore-1.3.tar.gz http://osxbook.com/book/bonus/chapter8/core/download/gcore-1.3.tar.gz


我相信你正在寻找此信息 https://web.archive.org/web/20200103164014/https://osxbook.com/book/bonus/chapter8/core/

具体来说:

/* UNIX Third Edition, circa early 1973 */
/* ken/sig.c */

core()
{
int s, *ip;
extern schar;

/* u is the user area */
u.u_error = 0;          /* reset error code to "no error" */
u.u_dirp = "core";      /* file name to search for */
ip = namei(&schar, 1);  /* do search; schar means it's a kernel string */

if (ip == NULL) {       /* failed to find */
    if (u.u_error)      /* because of some error */
        return(0);      /* so bail out */
    ip = maknode(0666); /* didn't exist; so create it */
}

if (!access(ip, IWRITE)) { /* check "write" permission; 0 means OK */
    itrunc(ip);            /* truncate the core file */

    /* first we write the user area */
    u.u_offset[0] = 0;     /* offset for I/O */
    u.u_offset[1] = 0;     /* offset for I/O */
    u.u_base = &u;         /* base address for I/O (user area itself) */
    u.u_count = USIZE*64;  /* bytes remaining for I/O; USIZE=8 */
    u.u_segflg = 1;        /* specify kernel address space */
    writei(ip);            /* do the write */

    /*
     * u_procp points to the process structure
     * p_size is the size of the process's swappable image (x 64 bytes) */
     */
    s = u.u_procp->p_size - USIZE; /* compute size left to write */
    
    /*
     * This sets up software prototype segmentation registers to implement
     * text(=0 here), data(=s here), and stack(=0 here) sizes specified.
     */
    estabur(0, s, 0);

    u.u_base = 0;          /* base address for I/O (start of space) */
    u.u_count = s*64;      /* s is in units of 64 bytes, so adjust */
    u.u_segflg = 0;        /* specify user address space */
    writei(ip);            /* do the write */
}
iput(ip);                  /* decrement inode reference count */
return(u.u_error==0);      /* done */
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OS X:在不关闭进程的情况下生成核心转储? 的相关文章

  • 高级 Win32 图像文件 I/O?

    我想在 Windows C 应用程序中将图像文件读入内存 什么是一个相当简单的解决方案 也许类似于 IOS 提供的UIImage 我希望支持合理数量的文件格式 我需要为图像处理的位图提供一些低级访问权限 我在互联网上阅读了很多内容 看起来
  • 将 2D 数组映射到 1D 数组

    我想用一维数组来表示一个二维数组 函数将传递两个索引 x y 和要存储的值 这两个索引代表一维数组的单个元素 并相应地设置它 我知道一维数组需要具有 arrayWidth arrayHeight 的大小 但我不知道如何设置每个元素 例如 如
  • 测试 hdf5/c++ 中的组是否存在

    我正在打开一个现有的 HDF5 文件来附加数据 我想向那个叫做的小组保证 A存在以供后续访问 我正在寻找一种简单的方法来创建 A有条件地 如果不存在则创建并返回新组 或者返回现有组 一种方法是测试 A存在 我怎样才能高效地做到这一点 根据
  • 我应该在单元测试中使用 AutoMapper 吗?

    我正在为 ASP NET MVC 控制器方法编写单元测试 这些控制器依赖于IMapper 我创建的用于抽象 AutoMapper 的接口 使用 Castle Windsor 通过构造函数注入传入 动作方法使用IMapper从领域对象映射到
  • 浮点提升:stroustrup vs 编译器 - 谁是对的?

    在 Stroustrup 的新书 C 编程语言 第四版 第 10 5 1 节中 他说 在执行算术运算之前 整数提升用于从较短的整数类型创建整数 类似地 浮点提升是用于从浮点数创建双精度数 我用以下代码确认了第一个声明 include
  • 身份未映射异常

    System Security Principal IdentityNotMappedException 无法转换部分或全部身份引用 该错误仅在应用程序注册后出现一次 当 SecurityIdentifier 无法映射时 例如 返回 Ide
  • 对数字进行向上和向下舍入 C++

    我试图让我的程序分别向上和向下舍入数字 例如 如果数字是3 6 我的程序应该四舍五入最接近的数字 4 如果该数字是3 4 它将向下舍入为 3 我尝试使用ceil库获取 3 个项目的平均值 results ceil marks1 marks2
  • Qt中正确的线程方式

    我的图像加载非常耗时 图像很大 并且在加载时也完成了一些操作 我不想阻止应用程序 GUI 我的想法是在另一个线程中加载图像 发出图像已加载的信号 然后用该图像重绘视图 我的做法 void Window loadImage ImageLoad
  • for 循环 - 没有效果的语句

    由于某种原因 我收到错误 statement with no effect关于这个声明 for j idx j lt iter j increment printf from loop idx i int idx punc ctxt j 你
  • C#:如何使用 SHOpenFolderAndSelectItems [重复]

    这个问题在这里已经有答案了 有人可以举例说明如何使用 shell 函数吗SH打开文件夹并选择项目 http msdn microsoft com en us library bb762232 VS 85 aspx来自 C 我不太明白如何使用
  • 标准 C 中的 sizeof 与 sizeof()? [复制]

    这个问题在这里已经有答案了 我看到一些直接使用 sizeof 的代码 想知道它是否是标准 C 令我惊讶的是 它运行得很好 这是一个例子 include
  • 为什么 C 函数不能返回数组类型?

    我是 C 语言新手 想知道 为什么 C 函数不能返回数组类型 我知道数组名是数组第一个值的地址 而数组是 C 中的二等公民 您自己已经回答了这个问题 数组是二等公民 C 按值返回 数组不能按值传递 因此不能返回它们 至于为什么数组不能按值传
  • 如何使用 Clang 查找内存泄漏

    我在我的机器 ubuntu 中安装了 Clang 以便发现我的 C 代码中的内存泄漏 我编写了一个示例代码来检查它的工作情况 如下所示 File hello c for leak detection include
  • 便携式终端

    有没有办法根据所使用的操作系统自动使用正确的 EOL 字符 我在想类似的事情std eol 我知道使用预处理器指令非常容易 但很好奇它是否已经可用 我感兴趣的是 我的应用程序中通常有一些消息 稍后我会将这些消息组合成一个字符串 并且我希望将
  • 宏观评价[重复]

    这个问题在这里已经有答案了 可能的重复 未定义的行为和序列点 https stackoverflow com questions 4176328 undefined behavior and sequence points 我无法理解以下宏
  • 有没有办法让 VS2010 在我的方法中扩展或收缩 try 块?

    我的代码有很多 try catch finally 块 与我在 VS2010 中的方法不同 除了添加区域之外 我无法在开发时扩展或收缩这些区域来隐藏内容 try vm R vm Qu vm T vm D vm Fil vm Type vm
  • 局部静态变量初始化是线程安全的[重复]

    这个问题在这里已经有答案了 假设我有一个包含三个静态函数的类 如下所示 include
  • 从 C# 中的 .NET SecureString 读取单个字符?

    WPF 的PasswordBox 返回一个SecureString 它对窥探者隐藏密码 问题是你最终必须获得密码的值 而我在网上找到的建议都涉及将值复制到字符串中 这会让你回到窥探者的问题 IntPtr bstr Marshal Secur
  • 如何使复选框不可选择?

    我想知道你是怎么做的CheckBox在c 中无法选择 我认为这会是类似 SetSelectable false 之类的东西 但我似乎看不到该方法 I found CanSelect但这似乎是只读属性 您可以设置自动检查 http msdn
  • 如何仅更改 DateTime 的日期部分,同时保留时间部分?

    我在代码中使用了很多 DateTime 我想将这些日期时间更改为我的特定日期并保留 时间 1 2012 02 02 06 00 00 gt 2015 12 12 06 00 00 2 2013 02 02 12 00 00 gt 2015

随机推荐

  • JAX-RS 和 JSON 搞砸了

    我已经设置了这个简单的 Java 类 import javax xml bind annotation XmlRootElement XmlRootElement public class Person private int id pri
  • 使用 jquery-uidraggable 对可拖动对象进行分组

    我想使用 jquery Draggable droppable 让用户选择一组对象 每个对象在角落里都有一个复选框 然后将所有选定的对象作为一组拖动 我一辈子都不知道该怎么做 哈哈 我认为这将导致一个可用的解决方案 在每个可拖动对象上 使用
  • jQuery 手风琴焦点

    这是我的第一篇文章 如果您想了解更多信息 请告诉我 我正在使用选择列表和 jQuery 手风琴 当用户从列表中选择一个值时 它会使用 activate 方法打开折叠面板的相关部分 除了将窗口集中在手风琴上而不是让用户留在同一个地方之外 这工
  • RxJava/RxAndroid - 处理多个 EditText 更改

    我有 3 个 EditText 字段 并且为这些字段创建了 3 个可观察值 Observable
  • 如何在 Java 中设置工具提示的插图?

    我创建了一个带有 HTML 格式文本的工具提示 效果很好 但边框和文本之间没有空格 如何设置 Insets 或 EmptyBorder 找到了一篇关于如何更改 Java ToolTip 的属性 背景 边框等 http blogs oracl
  • 禁用 htaccess 中的 php 功能

    我正在尝试创建一个流行网站的私人克隆 该网站提供了 在线编写 php 代码 作为个人练习的可能性 我在文本区域写了一些代码 代码以某种方式在服务器端执行 返回输出 我希望输出与 apache 实例提供的输出完全相同 并包含我的代码生成的所有
  • Axis2 无法加载 DLL

    我在 Apache Axis2 日志文件中发现了以下行 Sat Nov 14 12 16 08 2015 error util src class loader c 167 Loading shared library lib axis2
  • MongoDB 查询生成 OR 响应而不是 AND

    我正在使用 MongoDB 版本 2 6 5 并且我有一个如下所示的集合 id ObjectId 555a3398f4c572a44f877dcd created ISODate 2015 05 18T17 02 14 951Z value
  • 如何为应用程序引擎应用程序设置 vscode Python 调试器?

    按照官方的步骤操作后wiki https code visualstudio com docs python debugging google app engine debugging使用断点启动或设置断点时 我不断收到以下错误 ptvsd
  • 如何从 PHP 列表中随机选择 10 个内容?

    我知道如何选择one数组中的随机项 但是怎么样ten从一组 例如 二十个 项目中随机选择项目 在 PHP 中 让它变得更复杂的是 每个项目实际上都有两部分 文件名和描述 基本上 它适用于每次重新加载时都会显示十个随机图像的网页 该数据的实际
  • 在 Javascript 中分割字符串

    我正在尝试从以下 href 中提取文章 ID MarketUpdate Pricing 9352730 我只想提取字符串末尾的 ID 并使用以下代码 var newsLink this attr href var newsString ne
  • 如何设置 CLion 以使用 waf 作为构建系统

    我正在尝试配置我的 Intellij Clion IDE 以使用 ns 3 由于 ns 3 使用的是 waf 它比我想象的更棘手 并且很高兴听到任何建议 CLion 支持编译数据库 https www jetbrains com help
  • 命令行中的“@”是什么意思?

    将 放在某些内容 例如包含 Java 运行命令的类路径条目的文件的路径 之前有什么效果 我知道这与文件内容有关 但正如您可以想象的那样 尝试在 Google 上搜索它有点困难 我也找不到谈论它的联机帮助页 它在不同的程序中可能意味着不同的事
  • 匿名类型可以从另一个类型继承吗?

    根据 MSDN 文档StringComparer OrdinalIgnoreCase http msdn microsoft com en us library system stringcomparer ordinalignorecase
  • SketchUp 导出带有纹理的 obj - 如何

    Windows 7 64 位 SketchUp Make 13 0 4812 Goal 将 SketchUp skp 模型转换为 obj并使用 Three js 加载到 WebGL Problem sketchup 将模型导出到 obj具有
  • Django Celery 日志记录最佳实践

    我正在尝试让 Celery 日志记录与Django 我已经设置了日志记录settings py转到控制台 这工作正常 因为我正在托管Heroku 在每个模块的顶部 我有 import logging logger logging getLo
  • Angular4:无法读取未定义的属性

    我正在尝试使用他们在网站上提供的教程来学习 angular4 这是代码 hero ts export class Hero constructor public id number public name string 在组件 ts中 im
  • SQL 选择不同的前 2 个

    如果我有一个名为 Part 的表 其中包含列 PartID IDNumber Length 和数据 PartID IDNumber Length 1 Test1 50 2 Test1 60 3 Test2 50 4 Test3 70 如何仅
  • 在不同项目中生成POCO类到具有Entity Framework模型的项目

    我正在尝试使用 VS2010 的 EF4 存储库模式 为此 我通过右键单击实体模型设计器并单击添加代码生成项来使用 POCO 代码生成 然后我选择 POCO 模板并获取我的课程 我希望能够做的是将我的解决方案构建为实体 POCO 类的单独项
  • OS X:在不关闭进程的情况下生成核心转储?

    我知道如何在进程崩溃时在 OS X 上生成核心转储 但我真正需要做的是附加到进程 生成核心转储 然后恢复该进程 而不杀死它 很久以前 也许一年半前 我有 C 代码可以做到这一点 它使用 OS X 内核库连接到一个进程 读取其所有线程状态和内