python - 逐行跟踪和记录 C++ 程序的执行情况

标签 python c++ visual-studio logging trace

我正在开发一个用 C++ (Visual Studio) 编写的开源有限元软件。提供的文档和示例仅有助于了解为特定目的调用哪些方法,但无助于让用户知道这些方法到底在做什么。对于某些方法,除了 C++ 代码之外没有其他可用的引用资料(例如书籍、研究论文等)

因此,为了推导这个概念,我试图使用断点和查看调用堆栈(visual studio 中提供的选项)来跟踪每一行执行,这可能对跟踪一个小程序很有用,但我的程序构成了很多类具有多个继承和多态函数。为了了解程序执行流程,我想在日志文件中打印程序执行的每一行。

在研究过程中,我发现了一些用 python 语言编写的有用信息 ( here )。这正是我所需要的。为了方便读者,我复制了下面视频中提到的代码

import sys

def remove_html_markup(s):
    tag     =   False
    quote   =   False
    out     =   " "

    for c in s:
        if c == 'c' and not quote:
            tag = True
        elif c== '>' and not quote:
            tage = False
        elif c == '"' or c == "'" and tag:
            quote = not quote
        elif not tag:
            out = out + c
    return out

def traceit(frame, event, arg):
    if event == "line":
        filename    =   frame.f_code.co_filename
        lineno      =   frame.f_lineno
        print open(filename).readlines()[lineno - 1]

    return traceit

sys.settrace(traceit)
s = remove_html_markup('"<')
sys.settrace(none)

我期待 traceit 函数的类似版本的 C++ 代码,它可以在单独的日志文件中打印正在执行的每一行。我不知道如何扩展它,以便它可以打印所有继承和多态函数。

我还看到并尝试了 answer 中提供的一种方法。在 C++ 的 StackOverflow 上。但是,它有两个缺点

  1. 它只打印文件名、函数名和行号。我还想打印正在执行的语句。
  2. 在函数的开头,我必须调用一个方法 CALLSTACK_DUMP();,这在我的程序中是做不到的,因为有太多的函数。

最佳答案

Python 是逐行解释的。解释型语言通常有某种跟踪触发器,因此在解释每一行执行时,它还会跟踪这些行。 C++ 是一种完全编译的语言,因此没有这种跟踪功能。

关于python - 逐行跟踪和记录 C++ 程序的执行情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57079838/

相关文章:

c++ - cv::goodFeaturesToTrack 不返回任何特征

c# - 没有足够的存储空间可用于在 Visual Studio 2008 中处理此命令

visual-studio - DevExpress控件在Visual Studio工具箱中不可见

visual-studio - 经典的 ASP super 新手问题

python - Wapiti 安全工具 : Getting "Invalid Syntax Error "

python - 为图形图例创建一个双色矩形的 matplotlib mpatches

c++ - 在 Visual Studio 中执行 MSI 命令

python - 如何计算字典中的相同值?

python - 通过 subprocess.Popen 在 python 中执行 R 脚本

c++ - 在 'if' 条件中定义 fstream