小编Pat*_*oni的帖子

你如何让Git忽略空格和标签?

我有一个小脚本项目,由一个名为"Droid XX-XX-XX"的目录中的五个不同的源文件组成.每次我创建源目录的新备份副本时,我都会将日期放在X中.因此,不同日期大约有15种不同的版本.我想从最早开始将这些中的每一个添加到我的新Git存储库中.

但是我遇到了几个问题.

  1. 一个问题是某些文件使用制表符进行缩进,而其他文件使用空格 - 但即使唯一的区别是制表符与空格问题,Git也会将整行视为不同.如何让Git忽略缩进格式?

  2. 另一个问题是某些文件名没有空格而其他文件名之间有空格 - 但Git将它们视为不同的文件.更糟糕的是,有时文件名被改为不同的东西(比如"PatrolPlan"改为"Patrol"),没有真正的理由.当我添加一组新文件时,我怎么能告诉Git即使文件名不同,它实际上只是某个旧文件的新版本?或者更好的是,我可以将其设置为在发生这种情况时自动检测吗?

  3. 最后一个问题是,在开发过程中的某些时刻,我们将两个源文件合并为一个,或者将一个文件拆分为两个 - 但是Git不会自动检测相似性并推断出发生了什么.我怎么能告诉Git发生了什么?或者更好的是,如何将两个源文件合并或拆分时自动检测?

我意识到问题(2)和(3)是高度相关的.谢谢你的帮助!

git diff indentation

18
推荐指数
1
解决办法
3万
查看次数

Boost Thread的boost :: unique_lock是一个范围锁吗?

我理解,boost::mutex::scoped_lock当a 超出范围时,由a锁定的变量会自动解锁.

怎么样boost::unique_lock,它是否在超出范围时自动解锁变量?

任何人都可以指出该功能的参考.

double x;
boost::mutex x_mutex;

void foo() 
{
    {
         boost::unique_lock<boost::mutex> lock(x_mutex);
         x = rand();
    }    
    ...... some calculation which takes 10 second ......
    ...... is x still locked here??? ......    
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

c++ multithreading boost

12
推荐指数
1
解决办法
1万
查看次数

ifstream :: open无法在Visual Studio调试模式下工作

我已经在这里讨论了ifstream问题,而且我仍然无法阅读简单的文本文件.我正在使用Visual Studio 2008.

这是我的代码:

// CPPFileIO.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <fstream>
#include <conio.h>
#include <iostream>
#include <string>

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{

    ifstream infile;
    infile.open("input.txt", ifstream::in);

    if (infile.is_open())
    {
        while (infile.good())
            cout << (char) infile.get();
    }
    else
    {
        cout << "Unable to open file.";
    }
    infile.close();
    _getch();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我通过检查值来确认input.txt文件在正确的"工作目录"中argv[0].Open方法不起作用.

我也无法调试 - 如果我无法设置手表infile.good()infile.is_open()?我一直在

Error: member function not present. …
Run Code Online (Sandbox Code Playgroud)

c++ ifstream visual-studio

7
推荐指数
2
解决办法
2万
查看次数

析构函数结束时的分段错误

我不知道这个问题是否会明确,因为我不能提供太多细节(我正在使用TPL并且自己写了大量的行).但我会试一试.

我遇到了一个我无法理解的分段错误.有一个结构(我没有设计但应该经过充分测试),其析构函数看起来像这样

Data::~Data()
{
  if(A_ != 0) {
    delete A_;
    A_ = 0;
  }

  if(B_ != 0) {
    delete B_;
    B_ = 0;
  }

  if(C_ != 0) {
    delete C_;
    C_ = 0;
  }
} // HERE
Run Code Online (Sandbox Code Playgroud)

令我困扰的是,在调试时,我得到了段错误发生在标有"HERE"的行.类Data只有A_,B_和C_作为动态分配的属性.我还尝试在其他非动态复合属性上显式调用析构函数,以查看在销毁过程中是否出现错误,但是在析构函数结束时又发生了段错误.什么样的错误可以在这一点上产生段错误?

我希望这个问题很清楚,如果需要我会添加细节.

编辑:谢谢你的回复.我知道这是一段稀疏的代码,但整个库当然太大了(顺便说一下,它来自Trilinos,但我认为错误不是他们的错,在处理他们的结构时一定是我的错误.我使用过短名称,以保持问题更紧凑).有人在评论中回答说:

  • 关于删除之前的检查和原始指针:正如我所说,这不是我的选择.我猜这是一个双重保护,以防出现问题,A_,B_或C_已经被数据结构的其他所有者删除了.选择原始指针vs shared_ptr或其他安全/智能指针可能是因为这个类几乎从不直接使用,而只是由具有指向Data的指针的Map类的对象.这个类Map在同一个库中实现,因此他们可能选择了原始指针,因为他们知道他们正在处理什么以及如何处理.
  • 是的,数据结构由同一对象的所有副本共享.特别是,有一个Map类,它包含一个指向Data对象的指针.所有Map都是彼此的副本,共享相同的数据.引用计数器跟踪有多少Map持有指向数据的指针.要销毁的最后一个Map删除数据.
  • 数据结构的引用计数器正常工作,我检查了它.
  • 我不是在叫这个类的析构函数.它由类Map的对象的析构函数自动调用,该对象具有指向Data作为属性的指针.
  • 数据继承自BaseData,其(虚拟)析构函数不执行任何操作,因为它只是一个定义类的接口.
  • 发布重现问题的代码很难.因为许多的原因.该错误仅出现在2个以上的进程(这是一个mpi程序),我猜它是一个进程有一些空的列表并尝试访问某个元素.
  • 关于错误细节.我可以在这里给你在调试过程中错误的回溯中的最后一项(我为糟糕的格式道歉,但我不知道如何把它很好地说):

    1. 加密中的0x00007ffff432fba5(sig =)at ../nptl/sysdeps/unix/sysv/linux/raise.c:64

    2. 在abort.c:92中的abort()中的0x00007ffff43336b0

    3. 0x00007ffff436965b在__libc_message(do_abort =,FMT =)在../sysdeps/unix/sysv/linux/libc_fatal.c:189

    4. 0x00007ffff43736d6在malloc_printerr:在malloc.c(动作= 3,STR = 0x7ffff4447780 "免费()损坏未分选的块",PTR =):6283

    5. 位于malloc.c的__libc_free(mem =)中的0x00007ffff4379ea3:3738

    6. 0x0000000000c21f71在Epetra_BlockMapData ::〜Epetra_BlockMapData(这= 0x1461690,__in_chrg =)在/home/bartgol/LifeV/trilinos/trilinos-10.6.4-src/packages/epetra/src/Epetra_BlockMapData.cpp:110

最后,让我重申一下我的疑问:即使所有属性都已被删除,析构函数的结尾会出现什么样的错误?再次感谢!

c++ destructor segmentation-fault

7
推荐指数
1
解决办法
8104
查看次数

为什么我的格式在boost日志中不起作用

boost::log在这个函数中使用:

#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/utility/setup/file.hpp>

void InitLog() {
  logging::core::get()->set_filter(logging::trivial::severity >= logging::trivial::debug);
  logging::add_file_log(
            keywords::file_name = AppHolder::Instance().config().log_folder + "/sign_%Y-%m-%d_%H-%M-%S.%N.log",
            keywords::rotation_size = 10 * 1024 * 1024,
            keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0),
            keywords::format = "%TimeStamp% (%LineID%) <%Severity%>: %Message%"
            );
}
Run Code Online (Sandbox Code Playgroud)

然后,给出电话:

BOOST_LOG_TRIVIAL(info) << "thread id: " << this_thread::get_id() << " Initialization succeeded";
Run Code Online (Sandbox Code Playgroud)

输出不符合预期:时间戳,行ID严重性为空.

()<>:线程ID:7f58e30e8740初始化成功

c++ boost boost-log

7
推荐指数
2
解决办法
3632
查看次数

Boost.Log同时登录文件和标准输出?

我已boost::log成功使用stdout(使用TRIVIAL宏)登录到文件(基本上按照教程中的步骤).

我们如何配置同时登录文件标准输出?

当我们想要同时拥有日志文件以及进入控制台日志的所有输出时,这是我们设置中的常见用例.

任何输入赞赏!

c++ boost boost-log

7
推荐指数
1
解决办法
6679
查看次数

使用c ++在linux中检查文件存在和文件权限的最佳方法是什么

boost::filesystem::exists()用来检查文件的存在.

有没有更好的方法呢?

另外我如何找到文件权限?

c++ boost

6
推荐指数
3
解决办法
8025
查看次数

如何调试python-c++程序

我得到了一个相当复杂的分布式编程框架,其中有:

  1. 一个控制器,BC用 Python 编写,作为twisted插件,在某台机器上运行;
  2. N守护进程,BM用 Python 编写,但将 C++ 核心包装为共享库,方式如下:

import imp handle = imp.load_dynamic('mylib', '../libmy.so')

然后每个人都通过一个交互BM与 the 对话,但我们不关心这个。BCjsonrpc

我要做的是调试,可能以进入/单调试/单步调试方式的方式进行调试,但不限于此BM过程,该过程在前端显示为单个终端中的同构字符流。

对 C++ 部分非常感兴趣,考虑到 Python 代码几乎最终发布并且运行良好。

由于这种语言混合,我对什么类型的工具可能有用有点困惑。

c++ python debugging

6
推荐指数
1
解决办法
2309
查看次数

Python,XML AttributeError:“ NodeList”对象没有属性“ firstChild”

您好,我使用的xml文件有问题。现在发生的事情是,每当我尝试获取msg标记时,都会收到一个错误,阻止我访问数据。这是到目前为止我正在编写的代码。

from xml.dom import minidom
import smtplib
from email.mime.text import MIMEText
from datetime import datetime

def xml_data ():

  f = open('C:\opidea_2.xml', 'r')

  data = f.read()

  f.close()

  dom = minidom.parseString(data)

  ic = (dom.getElementsByTagName('logentry'))

  dom = None      
  content = ''  
  for num in ic:

    xmlDate = num.getElementsByTagName('date')[0].firstChild.nodeValue

    content += xmlDate + '\n '

    xmlMsg = num.getElementsByTagName('msg')


    if xmlMsg !='' and len(xmlMsg) > 0:
        xmlMsgc = xmlMsg[0].firstChild.nodeValue
        content += "   Comments: \n        " + str(xmlMsg) + '\n\n'

    else:
        xmlMsgc = "No comment made." …
Run Code Online (Sandbox Code Playgroud)

python xml xml-parsing

5
推荐指数
1
解决办法
1万
查看次数

了解Qt平台变量

我有一个简单的Qt pro文件,目的是在不同的开发平台之间共享,即Windows 10和Linux发行版.

因此,我在这个文件中分隔了两个部分,其中库,包括等等是依赖于系统的,并且在这个MWE中只有两个消息.

QT       += core gui
CONFIG += c++11

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = myappname
TEMPLATE = app

SOURCES += main.cpp \
    MultixWindow.cpp

HEADERS  += \
    MultixWindow.h

FORMS    += MultixWindow.ui

win32
{
    message( "Running qmake for Windows" )
}

unix
{
    message( "Running qmake for Linux" )
}
Run Code Online (Sandbox Code Playgroud)

我不明白的是,Qmake(我在Windows 10 x64上)进入这两个部分!换句话说,Qt Creator的General Messages日志说

项目消息:为Windows运行qmake

Project MESSAGE:为Linux运行qmake

应该如何pro描述跨平台文件?

c++ qt cross-platform

3
推荐指数
1
解决办法
89
查看次数