gpt4 book ai didi

c++ - 应该在 C++ 源代码中修改什么以生成显示函数名称和运算符的控制流图?

转载 作者:行者123 更新时间:2023-12-05 07:00:54 32 4
gpt4 key购买 nike

我的 C++ 程序可以将 CFG 演示文稿构建为 png 文件:

#include <iostream>
#include <array>
#include <string>
#include <cstring>

int partitionFunc(std::string &str, int startInd, int endInd)
{
int primIndex = startInd;
int pivotVal = str[endInd];
for(int i = startInd; i < endInd; i++) {
if(str[i] <= pivotVal) {
char tempIn = str[i];
str[i] = str[primIndex];
str[primIndex] = tempIn;
primIndex++;
}
}

char tempOut = str[primIndex];
str[primIndex] = str[endInd];
str[endInd] = tempOut;

return primIndex;
}

void runQsort(std::string &str, int startInd, int endIndex)
{
if(startInd < endIndex) {
int primIndex = partitionFunc(str, startInd, endIndex);
runQsort(str, startInd, primIndex - 1);
runQsort(str, primIndex, endIndex);
}
}

int main(int argc, char * argv[])
{


std::array<std::string, 6> verbs = { "alternative", "destination", "airlines", "turbulence", "contribution", "ultimate" };

std::string selected;
int option = 14;
int endIndex;

switch (option)
{
case 1:
selected = verbs[0];
break;
case 2:
selected = verbs[1];
break;
case 3:
selected = verbs[2];
break;
case 4:
selected = verbs[3];
break;
case 5:
selected = verbs[4];
break;
default:
selected = verbs[5];
break;
}

runQsort(selected, 0, selected.length() - 1);

int x = 0;

while(x < selected.length()) {
std::cout << selected[x];
x++;
}

std::cout << std::endl;

return 0;
}

为了实现可视化,我使用 clang++ 处理整个代码,llvm 将源代码解析为 dot 格式:

clang -emit-llvm main.cpp -c -o main.bc
opt --dot-cfg-only main.bc

最后,要执行此命令以将图形视为流程图:

dot -Tpng .main.dot -o main.png

我遇到的问题是在输出文件中出现百分号字符,而缺少函数和运算符标识符:

trash22

很难区分特定 block ,因为它们存在于源 block 中。我会消除那些令人尴尬的字符,因为它们被放入 cpp 文件中。必须在此处添加哪些说明才能做到这一点(或者可以推荐哪些资源以熟悉该主题)?如果在适本地编辑源代码后它是一个可用选项,我宁愿继续使用 clang++/llvm 进行解析。

最佳答案

LLVM 使用 Static Single Assignment (SSA)在其中间表示(IR)中表示源。这需要 LLVM 向 IR 添加更多 SSA 变量。这些将被编号。但是您可以通过包含标志 -fno-discard-value-names 来保留您的源变量名称。

关于c++ - 应该在 C++ 源代码中修改什么以生成显示函数名称和运算符的控制流图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63987739/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com