小编Mao*_*man的帖子

使用frama-c的值分析计算函数的可达性

这是我的例子:

int in;
int sum(int n){
    int log_input = n;
    int log_global = in;
    return 0;
}

int main(){
    int n = Frama_C_interval(-10, 10);
    in = n;
    if (n > 0){
        sum(n + 4);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是在main中初始化时找到输入变量n的范围,从而得到函数sum.此示例中的正确范围是[1,10].

在示例中,我想将原始输入"保存"在全局值中,并通过将其分配到变量log_global中来重新引入它,从而发现导致到达函数的原始输入.在此示例上运行frama-c时,我们得到log_input的范围是[5,14],log_global的范围是[-10,10].我理解为什么会发生这种情况 - in的值设置在main的开头,并且不受对n的进一步操作的影响.

我想知道在frama-c中是否有一种简单的方法可以改变它?也许是对frama-c代码的一个简单修改?

我有一个不相关的想法是操纵main中的if语句:

if (in > 0){
    sum(in + 4);
}
Run Code Online (Sandbox Code Playgroud)

我使用全局变量而不是n.这确实产生了正确的范围,但是这种解决方案不能很好地扩展到更复杂的功能和更深的调用堆栈.

c abstract-interpretation frama-c

6
推荐指数
1
解决办法
128
查看次数

为什么属性从配置初始化为null而不是空列表?

我有一个asp.net-core web api项目,其配置包含以下定义:

"MyClass": {
   "Value1": 1,
   "Value2": []
}
Run Code Online (Sandbox Code Playgroud)

此配置用于初始化以下类:

public class MyClass
{
    public int Value1 { get; set; }
    public int[] Value2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用以下ConfigureServices方法中的以下代码从配置初始化此类Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.AddOptions();

    services.Configure<MyClass>(Configuration.GetSection("MyClass"));
    services.AddSingleton<AService>();

    services.AddMvc();
}
Run Code Online (Sandbox Code Playgroud)

我的服务构造函数如下所示:

public FeedbackRetrievalService(IOptions<MyClass> myclass)
{
    _myclass = myclass;
}
Run Code Online (Sandbox Code Playgroud)

在构造函数中我注意到Value2null,即使它出现在配置为空列表-这是我所期望的特性与初始化值.我预计null只有在配置中缺少字段时才会初始化属性.有什么办法可以将字段初始化为空列表吗?

c# asp.net-core

5
推荐指数
1
解决办法
473
查看次数

在asp.net core c#中使用hangfire时多次构造单例服务

我在 ASP.net core (2.2) 应用程序中使用基于内存的 Hangfire(1.6.21)。在Startup.cs我将服务配置为单例中:

services.AddSingleton<IXXXService, XXXService>(); // In ConfigureServices(...)
Run Code Online (Sandbox Code Playgroud)

并且还用以下几行启动 Hangfire:

app.UseHangfireServer(); // In Configure(...)
Run Code Online (Sandbox Code Playgroud)

这是简化的代码XXXService

public class XXXService : IXXXService
{
    public ExternalAPIService()
    {
        Console.WriteLine("xxx");
    }

    public void QueueRequest(Guid requestId)
    {
        BackgroundJob.Enqueue(() => this.AnalyzeRequest(requestId));
    }

    public async Task AnalyzeRequest(Guid requestId)
    {
        Console.WriteLine("Analyzing request...");
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,虽然XXXService被定义为单例 - 并且它实际上仅通过连续请求创建一次,但在最终调用 时,它会由hangfire 重新创建AnalyzeRequest。如何路由hangfire 以使用由ASP 的默认DI 管理的单例对象?

c# hangfire asp.net-core

5
推荐指数
1
解决办法
2351
查看次数

为什么不能一起使用静态和寄存器存储类?

以下列方式定义变量时:

static register int a1 = 0;
Run Code Online (Sandbox Code Playgroud)

我们得到错误:

error: multiple storage classes in declaration specifiers
Run Code Online (Sandbox Code Playgroud)

这个错误有什么根本原因吗?为什么变量既不能存储在寄存器中,也只能在启动/第一次调用时初始化?可以将寄存器存储类附加到全局变量.< - 编辑:不是真的

c compilation storage-class-specifier

3
推荐指数
2
解决办法
884
查看次数

如何禁用 TouchableOpacity 中的可点击开关?

在我的应用程序中,我有一行文本,同一行的副词是一个开关。单击开关会更改其值,但我希望整行都可单击并更改其值。

我最终使用以下代码得到了这个代码TouchableOpacity

<TouchableOpacity style={{flexDirection: 'row', alignItems: 'center'}} onPress={() => {this.setState({isAgree: !this.state.isAgree})}>
     <Text>Do you agree? </Text>
     <Switch value={this.state.isAgree} onValueChange={(n) => this.setState({isAgree: n})}/>
</TouchableOpacity>
Run Code Online (Sandbox Code Playgroud)

该行是可单击的并且执行其应该执行的操作,但是当单击时,Switch按下事件会被忽略,TouchableOpacity这样我会得到两种不同的“效果” -TouchableOpacity按下开关以外的任何位置时的标准单击事件和Switch按下时的标准单击事件自行切换。

我尝试设置disabled={true}开关,它给出了我正在寻找的确切行为 - 除了开关变暗之外。玩弄zIndex或删除onValueChange也没有帮助。

javascript react-native

2
推荐指数
1
解决办法
1280
查看次数