我将以下 Github Actions 工作流程用于我的 C 项目。工作流在大约 40 秒内完成,但其中超过一半的时间用于安装valgrind包及其依赖项。
我相信缓存可以帮助我加快工作流程。我不介意多等几秒钟,但这似乎是对 GitHub 资源的毫无意义的浪费。
name: C Workflow
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: make
run: make
- name: valgrind
run: |
sudo apt-get install -y valgrind
valgrind -v --leak-check=full --show-leak-kinds=all ./bin
Run Code Online (Sandbox Code Playgroud)
运行sudo apt-get install -y valgrind会安装以下软件包:
gdbgdbserverlibbabeltrace1libc6-dbglibipt1valgrind我知道 Actions 支持缓存特定目录(并且已经有几个已回答的 SO 问题和关于此的文章),但我不确定 apt 安装的所有不同软件包最终在哪里。我假设/bin/或/usr/bin/不是唯一受安装软件包影响的目录。
是否有一种优雅的方法来缓存已安装的系统包以供将来运行工作流?
我想创建一个自定义DataGrid列(或DataGridCell样式),最好是在 XAML 中,并多次使用它,而不需要任何代码重复。它应该包含多个不同的控件,每个控件访问数据对象的不同属性。
似乎有两种方法可以做到这一点:
这两种解决方案都遇到相同的问题。DataGrid当指定内部控件的绑定时,它们似乎总是与整行而不是单元格相关。
DataGridTemplateColumn没有Binding属性,因此它CellTemplate绑定到整行,从而无法为多个列重用相同的模板,每个列访问行对象的不同属性。
同样,我可以以覆盖via的DataGridTextColumn样式访问的内容(请参阅此处),但我找不到访问内容属性的方法,因此我认为这是不可能的。Template{TemplateBinding Content}
这是一个虚拟示例DataGrid来说明我的情况:
public class Name
{
public string First { get; set; }
public string Last { get; set; }
public override string ToString() => $"{First} {Last}";
}
public class Team
{
public Name First { get; set; }
public Name …Run Code Online (Sandbox Code Playgroud) 我正在开发一个简单的内核,并且一直在尝试实现一个键盘中断处理程序来摆脱端口轮询。我一直在-kernel模式下使用 QEMU (为了减少编译时间,因为使用生成 isogrub-mkrescue需要相当长的时间)并且它工作得很好,但是当我想切换到-cdrom模式时它突然开始崩溃。我不知道为什么。
最终我意识到,当它从 ISO 引导时,它还会在引导内核本身之前运行 GRUB 引导加载程序。我发现 GRUB 可能会将处理器切换到保护模式,这会导致问题。
问题:通常我会简单地初始化中断处理程序,每当我按下一个键时,它就会被处理。但是,当我使用 iso 运行内核并按下一个键时,虚拟机就崩溃了。这发生在 qemu 和 VMWare 中,所以我认为我的中断一定有问题。
请记住,只要我不使用 GRUB,代码就可以正常工作。
interrupts_init()(见下文)是main()内核函数中调用的第一件事。
本质上的问题是:有没有办法让它在保护模式下工作?.
我的内核的完整副本可以在我的GitHub 存储库中找到。一些相关文件:
lowlevel.asm:
section .text
global keyboard_handler_int
global load_idt
extern keyboard_handler
keyboard_handler_int:
pushad
cld
call keyboard_handler
popad
iretd
load_idt:
mov edx, [esp + 4]
lidt [edx]
sti
ret
Run Code Online (Sandbox Code Playgroud)
interrupts.c:
#include <assembly.h> // defines inb() and outb()
#define IDT_SIZE 256
#define …Run Code Online (Sandbox Code Playgroud) 我需要解析具有动态元素的 XML 消息,因此我使用了 type 元素interface{}在 Message 结构中表示它。
一旦我知道了这个动态元素的类型(在运行时),我就会初始化一个消息结构,然后尝试解组 XML 消息。然而,动态元素的内容并未被解组。
这是一个 Go Playground,其中包含我想要实现的目标,以及评论和实际输出与预期输出:https://play.golang.org/p/eKVetUPmVI2
我尝试了几种变体,但无法使解组按预期工作。谁能帮助我理解为什么会出现这种行为以及如何使其发挥作用?提前致谢。
代码(以防有一天 Go Playground 链接中断):
package main
import "fmt"
import "encoding/xml"
// XML root
type Message struct {
XMLName xml.Name `xml:"message"`
Operation Operation `xml:"operation"`
}
// An Operation can contain either a Create or an Update element
type Operation struct {
Create *Create `xml:"create"`
Update *Update `xml:"update"`
}
// Doesn't matter...
type Create struct{}
// Update contains a Color element or Any other element …Run Code Online (Sandbox Code Playgroud)