C# &引用;“在逃”;调试/监测

C# &引用;“在逃”;调试/监测,c#,c++,debugging,C#,C++,Debugging,有没有一种方法/系统可以在不停止执行的情况下调试/监视代码? 在工业自动化控制编程(PLC/PAC/DCS)中,可以在程序运行时连接调试器,并在代码编辑器中查看变量和表达式的值,而无需设置断点或跟踪点 举个例子,让我们看一个F#多线程应用程序,其中代码在连续循环中执行或由计时器触发。是否有一种方法可以附加一个调试器(如VisualStudio调试器)并在不中断执行的情况下查看变量和表达式的值(在代码编辑器或监视窗格中) 如果不是同步的,这无关紧要,如果调试器/监视器没有捕获所有代码扫描,这是可以

有没有一种方法/系统可以在不停止执行的情况下调试/监视代码? 在工业自动化控制编程(PLC/PAC/DCS)中,可以在程序运行时连接调试器,并在代码编辑器中查看变量和表达式的值,而无需设置断点或跟踪点

举个例子,让我们看一个F#多线程应用程序,其中代码在连续循环中执行或由计时器触发。是否有一种方法可以附加一个调试器(如VisualStudio调试器)并在不中断执行的情况下查看变量和表达式的值(在代码编辑器或监视窗格中)

如果不是同步的,这无关紧要,如果调试器/监视器没有捕获所有代码扫描,这是可以接受的


<>我被要求为一个过程工厂创建一个高级控制器,我想使用C或F,甚至C++,使用一个托管的或本地的应用程序,而不是PAC系统。但在这种应用程序中,被迫中断执行以进行调试是一个巨大的缺点

更新 首先感谢大家的回答。 然而,基于这些答案,我意识到我可能需要将我的问题重新表述如下:

是否有人知道任何库/框架/包/扩展允许以与PAC开发平台完全相同的方式在windows或linux(C#、F#或C++)中使用本机或托管应用程序,具体如下:

1) 将开发平台置于“状态”模式,在该模式下,它会自动显示当前可见的代码EXEPRT中存在的变量和表达式的运行时值,而不会中断执行

2) 创建显示变量和表达式的运行时值的监视窗口,而不中断执行

此外,我正在寻找的是(像任何PAC平台一样)提供这些开箱即用的功能,而不需要对应用程序代码进行任何更改(比如添加日志指令)

先谢谢你

更新2

看起来好像有什么东西(见);有人知道他们在哪里还可以买到吗

更新3

对于那些感兴趣的人,我设法下载了最新版本的VSDEVAIDS。我安装了它,看起来还可以工作,但是没有许可证它毫无意义,也找不到关于如何联系作者的信息


如果有人运气更好,请告诉我。

这是正常要求-需要生产系统的仪器/诊断数据。它不是真正的调试器。这通常是您应该在系统设计中首先确定的事情之一

根本不了解你的系统很难说你需要什么,但一般来说,它们分为两类

  • 人类可读的跟踪——类似log4net的东西是我推荐的

  • 机器可读计数器等,如“最后一次刮除的部件数量”,。。。。。这一个更难概括,您也可以将其分层到log4net上。或者发明你自己的烟斗


  • 这是一项正常要求-需要来自生产系统的仪表/诊断数据。它不是真正的调试器。这通常是您应该在系统设计中首先确定的事情之一

    根本不了解你的系统很难说你需要什么,但一般来说,它们分为两类

  • 人类可读的跟踪——类似log4net的东西是我推荐的

  • 机器可读计数器等,如“最后一次刮除的部件数量”,。。。。。这一个更难概括,您也可以将其分层到log4net上。或者发明你自己的烟斗


  • 关于你编辑的问题,我几乎可以向你保证,你正在寻找的东西并不存在。无结果调试/监控对生产代码甚至是中等有用性,而无需事先努力?我早就听说了。认为C++和C语言都是非常跨平台的。有几点需要注意:

    几乎可以肯定的是,C++编译器是为非常具体的硬件而构建的,它可以满足您的需要。这种硬件的功能可能非常有限,而且编译器在其他方面可能不如大型的同类产品,例如gcc、clang、MSVC等等

    编译时插装可以做您需要的事情,尽管根据我的经验,它会影响速度和内存使用,甚至影响稳定性

    还有一些框架可以满足您的需求,但不会影响您的代码。例如,如果您使用WPF作为UI,则可以监视与应用程序的UI直接相关的任何内容。但是……这几乎不是比log4net更好的解决方案

    最后,有一些工具可以监视应用程序对Windows(
    procmon.exe
    /“进程监视器”(来自SysInternals)和Linux(
    strace
    )进行的每个系统调用。使用这些你几乎找不到什么。这就是说,易用性很难满足您的需求,严格来说,内部变量仍然不可见。如果你知道你将用你感兴趣的变量进行系统调用,并且可以设置足够的过滤,那么仍然可以考虑。


    此外,您应该重新考虑“不影响代码”的要求。NET框架允许您仅通过在构造过程中进行单个函数调用或从框架中的类派生来监视整个类。许多现代用户界面都是基于用户界面能够在其监视的数据发生任何更改时得到通知。为了使这项工作尽可能强大和简单,已经进行了大量的努力。但它确实要求你在编写代码时至少考虑它。

    < P>关于你编辑的问题,我几乎可以向你保证,你所寻找的是不存在的。无后果的调试/监控,即使对于没有优先级的生产代码也具有中等的实用性