【问题标题】:Need help to insert some text to my c++ file需要帮助将一些文本插入到我的 c++ 文件中
【发布时间】:2013-10-17 14:08:49
【问题描述】:

我想在我的 c++ 文件中的某行(模式)之后插入一些文本。以下是我的文件结构。

38 #include "stdlib.h"
39 #include "string.h"
40 #include "malloc.h"
41 

  ...

324 void DMProcMon::threadManagerMonitorThread(DMProcMon* dmProcMon)
325 {

    ...

338 while (dmState == DVProcMon::Active &&
339         DmManService::getDCMRestartingFlag() == 0){
340     try{

342         setupTimerVerification(dmProcMon);
343         setupSignalVerification(dmProcMon);
344
    ....

360 }

我想使用 gcov 添加代码覆盖宏。所以基本上我需要实现的是

  1. 在所有#include 语句之后添加以下文本。

    45 #ifdef GCOV
    46 extern "C"
    47 void _gcov_flush();
    48 #endif
    
  2. 在threadManagerMonitorThread函数的while语句后添加以下文本

    #ifdef GCOV
    _gcov_flush();
    #endif
    

所以最终代码如下所示。

38 #include "stdlib.h"
39 #include "string.h"
40 #include "malloc.h"
41 

45 #ifdef GCOV
46 _gcov_flush();
47 #endif

  ...


324 void DMProcMon::threadManagerMonitorThread(DMProcMon* dmProcMon)
325 {

    ...

338 while (dmState == DVProcMon::Active &&
339         DmManService::getDCMRestartingFlag() == 0){
340     try{

342 #ifdef GCOV
343 _gcov_flush();
344 #endif

346         setupTimerVerification(dmProcMon);
347         setupSignalVerification(dmProcMon);
348
    ....

360 }

最好的方法是什么。我想用 bash 或 pythyon 来做到这一点。

谢谢 ~S

【问题讨论】:

  • 您可能想了解如何使用ed,请参阅its documentation
  • Awk 应该是正确的工具,它通过正则表达式处理行并为文本编辑提供强大的语言。
  • 您的第一个 ifdef 部分未包含在您的最终代码中。第二部分不是在while 之后,而是在try 之后。有什么关系?

标签: bash


【解决方案1】:

您可以使用sed 在包含特定模式的行之后/之前插入一行。看到这个:https://stackoverflow.com/a/11695086/2749648

另外here 是关于如何在代码块之后插入一行的解释(这将帮助您处理#include 块)但我不确定如何修复while 语句。如果 while 语句在一行,那很容易,但很难保证。

【讨论】:

  • 感谢您的回答。但在我的情况下,因为这是一个 C++ 文件,我想在特定函数范围内、while 语句和 try 语句内插入行。所以这不是一个非常直接的替换或插入。
猜你喜欢
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 2022-12-16
  • 1970-01-01
相关资源
最近更新 更多