一分为二后,我想恢复到正常状态并恢复最新版本。
但是, git git bisect reset抱怨某些具有本地更改的文件会被 checkout 覆盖,我应该先存储。
藏匿并再次尝试重置抱怨某些不同的文件会被覆盖,我应该藏匿。把那个藏起来让我回到第一个错误,依此类推,循环往复。
IE
混帐藏匿处;git 平分重置
错误:文件 A、B 和 C 将被覆盖。请藏好
混帐藏匿处;git 平分重置
错误:文件 D 将被覆盖。请藏好
混帐藏匿处;git 平分重置
错误:文件 A、B 和 C 将被覆盖。请藏好
混帐藏匿处;git 平分重置
错误:文件 D 将被覆盖。请藏好
等等。我想清除所有的二等分并返回到最新的提交。
有任何想法吗?
[完整成绩单]
powerpro:source_build danny$ git stash ; git bisect reset
Saved working directory and index state WIP on (no branch): 01993b2 tsAnalysis changed to little Endian (htonl() etc)
HEAD is now at 01993b2 tsAnalysis changed to little Endian (htonl() etc)
error: Your …Run Code Online (Sandbox Code Playgroud) 我需要对一些遗留数据包处理代码进行更快的成员资格查找,这需要识别具有特定ID的数据包是否在特定列表中.
该列表仅每隔几秒更新一次,而数据包匹配经常发生,因此查找性能比插入/删除等更重要.
一般流程:
forall(special_PacketIDs)
{
pktIdSet.insert(theSpecialPktId)
}
while (1)
{
pkt = readPkt();
pktID = getPktIdOfPkt(pkt);
if ( aSpecialPkt(pktID) )
doSomething();
}
Run Code Online (Sandbox Code Playgroud)
现在,aSpecialPkt(pktId)定义为:
bool PktProcessor::aSpecialPkt(unsigned short pid)
{
return pktPidSet.find(pid) != pktPidSet.end();
}
Run Code Online (Sandbox Code Playgroud)
gprof报告了在std :: set :: find()中花费的大量时间
pktId的范围仅为8192个可能的值.以内存为代价分配线性阵列会更快,例如:
class LinearSet
{
public:
void insert(pid) { mPktIdSet[pid] = true; }
bool elementExists(pid) { return mPktIdSet[pid]; }
private:
bool mPktIdSet[8192];
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,在保持最佳性能的同时,是否有更多的"C++"方法可以做到这一点?
我正在尝试将一个小的C++测试程序链接main.o到第三方静态库,但是会得到一些无法解释的undefined reference错误.
特别:
g++ -o secoTest -lpthread main.o libEAPI.a
main.o: In function `main':
main.cpp:(.text+0x29fe): undefined reference to `EApiWDog_SetConfigAndStart(unsigned int, unsigned int, unsigned int, unsigned int, unsigned char, unsigned char, unsigned char)'
main.cpp:(.text+0x33fc): undefined reference to `EApiSetCarrier(unsigned char)'
main.o:main.cpp:(.text+0x3956): more undefined references to `EApiSetCarrier(unsigned char)' follow
main.o: In function `main':
main.cpp:(.text+0x3965): undefined reference to `EApiGPIOGetSerialCfg(unsigned char*)'
main.cpp:(.text+0x3a0a): undefined reference to `EApiSetCarrier(unsigned char)'
main.cpp:(.text+0x3a19): undefined reference to `EApiGPIOSetSerialCfg(unsigned char)'
main.cpp:(.text+0x3adf): undefined reference to `EApiFanEnable(unsigned int, unsigned char)'
main.cpp:(.text+0x3b83): …Run Code Online (Sandbox Code Playgroud) 在维护大型遗留代码库时,我遇到了这个函数,它用作 XML 树的访问器。
std::string DvCfgNode::getStringValue() const
{
xmlChar *val = xmlNodeGetContent(mpNode);
if (val == 0)
return 0;
std::string value = (const char *)val;
xmlFree(val);
return value;
}
Run Code Online (Sandbox Code Playgroud)
这个函数怎么能返回'0'?在 C 中,您可以返回一个零指针,char *表示未找到数据,但这在 C++ 中可以使用 std::string 吗?我不这么认为,但对 C++ 不够了解。
(10 岁)代码在 C++ 98 下编译和运行。
编辑我
感谢大家的评论。回答几个问题:
a) 代码实际上是 18 岁,大约有 500K-1M 行(?)
b) 异常处理已打开,但try-catch除了几个 in 之外,任何地方都没有块main(),这会导致程序立即终止。
c)调用代码中的糟糕设计似乎“信任”getStringValue()返回正确的值,所以很多类似的东西:
std::string s = pTheNode->getStringValue()
Run Code Online (Sandbox Code Playgroud)
可能只是幸运它从未返回零(或者如果它返回了,直到现在还没有人发现该错误)。
在大型单线程C++应用程序(使用GCC 4.4.7 20120313编译)中,简单指针赋值不等于原始指针值:
class DvComVectorStreamBase : virtual public std::ios
{
// some stuff here
};
class DvComVectorOStream : public DvComVectorStreamBase, public std::ostream
{
public:
DvComVectorOStream(int which = std::ios::out, size_t capacity = 0) :
DvComVectorStreamBase(which, capacity)
{}
};
class Formatter : public aStandAloneClass
{
// cruft removed
protected:
void initFunction();
ostream* mpStream;
DvComVectorOStream* mpVectorOStream;
}
Formatter:initFunction()
{
printf("mpStream %p mpVectorOStream %p\n", (void *)mpStream, (void *)mpVectorOStream);
if (mpVectorOStream == 0)
mpVectorOStream = new DvComVectorOStream(ios::out, 32768);
else
mpVectorOStream->clear();
printf("mpStream %p mpVectorOStream %p\n", (void …Run Code Online (Sandbox Code Playgroud)