簡體   English   中英

羅斯林:從basicblock獲得說明

[英]Roslyn : get instructions from a basicblock

在roslyn中生成的控制流程圖包含塊(basicblock)作為節點,每個basicblock包含一個或多個指令。 對於包含多個指令的basicblock,我嘗試獲取所有指令及其類型,這就是我所做的:

var cfg = ControlFlowGraph.Create(method);
foreach(var block in cfg.Blocks)
{
    foreach(var operation in block.Operations)
    {
        var syntax = operation.Syntax;
        Console.WriteLine(syntax.Kind());
    }
}

對於以下方法:

public int method(int x, int y)
{
y = 10;
x = y;
return x + y;
}

我得到結果:

ExpressionStatement
ExpressionStatement

但是我想得到嚴格的指令,例如指令x = y;的類型x = y; 我想獲得AssignmentExpressionSyntax 我也想根據它的類型對每條指令執行一些操作。

由於您正在查看語法類型,因此ExpressionStatement是該語句的正確類型。 您可以通過查看ExpressionStatement中的表達式種類來找到表達式的種類。

if (operation.Syntax is ExpressionStatement es)
{
    var kind = es.Expression.Kind();
}

但是,如果您正在使用操作(IOperation),則可以通過跳過語法並使用OperationKind獲得更好的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM