关于Intel pin的学习笔记(一)——KNOB< TYPE>构造函数的解释

关于KnobOutputFile()函数的解释

对于KnobOutputFile()这个函数我在网上很少能找到对他的详细解释,今天好好的研究了一下,顺便记录下来。
首先对这个函数的第一映像是,为啥文件的创建要用这么个鬼东西。如果我们回顾一下如何声明文件名变量KnobOutputFile,也会觉得我们为什么要为这种情况创建这么复杂的东西很奇怪。KnobOutputFile是一个在Intel pin内定义的类型选择器,用于自动解析和管理命令行开关。我们想在不同的测试执行中使用不同的文件名;最好的方法是用命令行发送文件名。由于选择器的存在,我们现在可以在命令行中发送文件名,如下所示:

Example 1     ../../../pin -t obj-intel64/inscount0.so -o pininscount.out -- /bin/ls
Example 2      ../../../pin -t obj-intel64/inscount0.so -- /bin/ls ..

因此,指令计数现在将存储在pininscount.out中,而不是inscount.out;唯一的区别是我们在这里包括-o filename,我们甚至不需要在源代码中做任何更改就可以覆盖默认的文件名。那么,如果我们想从命令行发送这样的多个信息,pin如何解析文件名呢?仔细看看KnobOutputFile的声明。

KNOB<string> KnobOutputFile(KNOB_MODE_WRITEONCE, "pintool", "o", "inscount.out", "specify output file name");

这第一个参数是KNOB_MODE_WRITEONCE,意思就是我们只打开文件写入一次。而这个参数还有其他好几个选项:

参数名作用
KNOB_MODE_WRITEONCE单个值,单次写入
KNOB_MODE_OVERWRITE单个值,用户在命令行执行时可覆盖写入
KNOB_MODE_ACCUMULATE单个值,可更新写入,但是不覆盖
KNOB_MODE_APPEND一系列值,叠加写入

但目前只用的到第一个参数。
之后,“pintool”说明了这个文件应该包含在哪一类家族中。然后使用了“o”,它作为一个pin tool标识,这个标识建议pin tool在命令行中,-o之后将是这个文件变量的期望字符串。可以看上面的例子是如何替换默认文件名的(-o pininscount.out)。最后一个参数只是给用户一个建议,如果需要这个字段,就在命令行中提供。在这种情况下,我们提供了一个默认文件名“inscount”。作为第四个参数。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个使用 Vue 3 编写的三种状态开关的示例代码: ```html <template> <div class="switch" :class="{ on: isOn, off: !isOn, indeterminate: isIndeterminate }" @click="toggle"> <div class="knob"></div> </div> </template> <script> import { ref } from 'vue'; export default { name: 'Switch', setup() { const isOn = ref(false); const isIndeterminate = ref(false); function toggle() { if (isIndeterminate.value) { isOn.value = true; isIndeterminate.value = false; } else { isOn.value = !isOn.value; } } return { isOn, isIndeterminate, toggle, }; }, }; </script> <style> .switch { position: relative; display: inline-block; width: 60px; height: 34px; background-color: #ccc; border-radius: 34px; transition: background-color 0.2s; } .switch.on { background-color: #2196f3; } .switch.off { background-color: #bbb; } .switch.indeterminate { background-color: #ff9800; } .switch .knob { position: absolute; top: 2px; left: 2px; width: 30px; height: 30px; background-color: #fff; border-radius: 50%; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); transition: transform 0.2s; } .switch.on .knob { transform: translateX(26px); } .switch.off .knob { transform: translateX(2px); } .switch.indeterminate .knob { transform: translateX(13px); } </style> ``` 这里使用了 Vue 3 的 `ref` 来声明状态变量,并使用 `setup` 函数来初始化状态变量和事件处理函数。在模板中,我们根据三种状态分别设置不同的样式类,并在点击时调用 `toggle` 函数来切换状态。样式使用了一些基本的 CSS 技巧来实现动态效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值