在某些情况下,在git bisect会话期间,测试特定的提交需要很长时间(例如,因为我必须构建一个完整的发行包并将其部署在一个特别奇怪的机器上).实际上,测试构建需要很长时间,以至于我想在不知道当前测试是否成功的情况下开始构建接下来的两个提交.这样,我可以通过测试当前版本并并行构建接下来的两个版本来加速二等分.
有没有人知道如何git bisect显示接下来的两个版本,具体取决于当前提交是好还是坏?
我开始git bisect会话时的常用工作流程是:
git bisect start # start a bisect session
git bisect bad # I noticed that the current state is broken
Run Code Online (Sandbox Code Playgroud)
现在,我经常知道过去的事情是有效的,但我不知道哪个版本是好的,所以我通常想把我的工作树恢复到较旧的状态,构建,测试,重复直到我找到一个工作版本我可以用git bisect good.
什么是"将我的工作树恢复到较旧状态"步骤的最佳方法?git reset --hard <some_good_rev>?git checkout <some_good_rev>?别的什么?请证明你的答案.
我写了一个函数,它可以生成树视图项的文本,即使树视图在远程进程中也是如此.该函数在远程进程中分配两个内存块,填充TVITEM结构(复制到远程进程中),发送TVM_GETITEM消息,最后将第二个远程内存块的内容读回本地缓冲区.这是代码:
std::string getTreeViewItemText( HWND treeView, HTREEITEM item )
{
DWORD pid;
::GetWindowThreadProcessId( treeView, &pid );
HANDLE proc = ::OpenProcess( PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, pid );
if ( !proc )
// handle error
TVITEM tvi;
ZeroMemory( &tvi, sizeof(tvi) );
LPVOID tvi_ = ::VirtualAllocEx( proc, NULL, sizeof(tvi), MEM_COMMIT, PAGE_READWRITE);
if ( !tvi_ )
// handle error
TCHAR buffer[100] = { 'X' };
LPVOID txt_ = ::VirtualAllocEx( proc, NULL, sizeof(buffer), MEM_COMMIT, PAGE_READWRITE );
if ( !txt_ )
// handle error
tvi.mask …Run Code Online (Sandbox Code Playgroud) 我似乎无法使用AssignProcessToJobObject函数将当前进程分配给CreateJobObject给定的作业对象句柄。这个问题已经在StackOverflow上问过几次了,但是到目前为止,所有解决方案(通常归结为嵌入UAC清单)似乎都不适合我。
我正在Windows 7上使用MSVC9。这是我的示例应用程序的源代码以及我要嵌入的一个小清单(据称可以解决问题-但对我而言不是):
我的示例应用程序(main.cpp):
#include <windows.h>
static void dumpLastError()
{
LPVOID lpMsgBuf;
DWORD dw = GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
OutputDebugStringA( (LPTSTR)lpMsgBuf );
LocalFree(lpMsgBuf);
}
int main()
{
HANDLE job = CreateJobObjectA( NULL, "demo job 123" );
if ( !job ) {
OutputDebugStringA( "CreateJobObject failed" );
dumpLastError();
return 1;
}
if ( !AssignProcessToJobObject( job, GetCurrentProcess() ) ) {
OutputDebugStringA( "AssignProcessToJobObject failed" );
dumpLastError();
return 1; …Run Code Online (Sandbox Code Playgroud) 我有一个类(对象),User.该用户有2个私有属性,"名称"和"受欢迎程度".我将对象存储到向量(容器)中.
从容器中,我需要找到前5位最受欢迎的用户,我该怎么做?(我有一个丑陋的代码,我会在这里发布,如果你有更好的方法,请告诉我.如果你认为矢量不是一个好的选择,请随意使用其他容器,但请仅使用:map或multimap,列表,向量或数组,因为我只知道如何使用它们.)我目前的代码是:
int top5 = 0, top4 = 0, top3 = 0, top2 = 0, top1 = 0;
vector<User>::iterator it;
for (it = user.begin(); it != user.end(); ++it)
{
if( it->getPopularity() > top5){
if(it->getPopularity() > top4){
if(it->getPopularity() > top3){
if(it->getPopularity() > top2){
if(it->getPopularity() > top1){
top1 = it->getPopularity();
continue;
} else {
top2 = it->getPopularity();
continue;
}
} else {
top3 = it->getPopularity();
continue;
}
}
} else {
top4 = it->getPopularity();
continue;
}
} else {
top5 = it->getPopularity(); …Run Code Online (Sandbox Code Playgroud) 内存泄漏发生了.代码有什么问题?
static sigjmp_buf jmpbuf=NULL;
static void alarm_func()
{
siglongjmp(jmpbuf, 1);
}
static struct hostent *timeGethostbyname(const char *domain, int timeout)
{
struct hostent *ipHostent = NULL;
jmpbuf=malloc(sizeof(sigjmp_buf));
signal(SIGALRM, alarm_func);
if(sigsetjmp(jmpbuf, 1) != 0)
{
alarm(0);
signal(SIGALRM, SIG_IGN);
return NULL;
}
alarm(timeout);//setting alarm
ipHostent = gethostbyname(domain);
signal(SIGALRM, SIG_IGN);
return ipHostent;
}
Run Code Online (Sandbox Code Playgroud)
功能上有问题timeGethostbyname.如果我timeGethostbyname多次调用该功能.将发生内存泄漏.EX:
int main(int argc, char **argv ){
char *servers="www.aaa.bbb.tt";
struct hostent *h;
while(1){
h=timeGethostbyname(servers, 2);
}
return(0);
}
Run Code Online (Sandbox Code Playgroud) 给出一个小的Perl库:
package P;
use strict;
use warnings;
print("Loading P\n");
our $k1 = 'v1';
our $k2 = 'v2';
our $k3 = 'v2';
Run Code Online (Sandbox Code Playgroud)
我尝试编写一个程序来加载,卸载和重新加载包,以便更好地理解包在Perl中的工作方式:
# main.pl
use strict;
use warnings;
use Symbol qw( delete_package );
# Load module
require "./P.pm";
my @incs = sort keys %INC;
my $numSyms = keys %P::;
print("Includes: @incs\nNumber of symbols: $numSyms\n");
# Unload module & delete package
delete_package('P');
delete $INC{'./P.pm'};
@incs = sort keys %INC;
$numSyms = keys %P::;
print("Includes: @incs\nNumber of symbols: $numSyms\n");
# Load module …Run Code Online (Sandbox Code Playgroud) 我使用 PostgreSQL 14 来管理一个存储医生表更新的表:用户可以更新医生的名字、姓氏和/或年龄。更新操作未触及的字段具有值NULL。
这是涉及两名不同医务人员的四次编辑的示例。ID 为 3 的医生收到了三个更新:前两个正在更新字段age,第三个涉及first_name:
SELECT * FROM medic_edits;
Run Code Online (Sandbox Code Playgroud)
| ID | 医生ID | 名 | 姓 | 年龄 |
|---|---|---|---|---|
| 1 | 1 | 印地 | ||
| 2 | 3 | 59 | ||
| 3 | 3 | 63 | ||
| 4 | 3 | 鲍勃 |
我想合并此表,以便在结果表中每个医生有一行,提供累积编辑。这是我当前的查询及其产生的输出:
SELECT
medic_id,
(ARRAY_REMOVE(ARRAY_AGG(first_name ORDER BY id DESC), NULL))[1] AS first_name,
(ARRAY_REMOVE(ARRAY_AGG(last_name ORDER BY id DESC), NULL))[1] AS last_name,
(ARRAY_REMOVE(ARRAY_AGG(age ORDER BY id DESC), NULL))[1] AS last_name
FROM medic_edits
GROUP BY medic_id
;
Run Code Online (Sandbox Code Playgroud)
| 医生ID | 名 | 姓 | 姓 |
|---|---|---|---|
| 1 | 印地 | ||
| 3 | 鲍勃 | 63 |
这正是我所期望的输出,但我怀疑这个ARRAY_REMOVE/ARRAY_AGG逻辑有点浪费。我想知道是否有一种方法可以在这里使用分区来获得良好的利润,该 …
sql postgresql greatest-n-per-group postgresql-performance array-agg
在Windows XP系统上,我正在编写一个Mangaged C++库,它在C#程序集中调用代码.不幸的是,只要我开始在C#程序集中引用一个符号,运行Managed C++库就会失败,并显示此错误(我从XP崩溃对话框中复制了此错误):
EventType : clr20r3
P1 : treeviewdemo.exe
P2 : 0.0.0.0
P3 : 4a5d6d62
P4 : system.windows.forms
P5 : 2.0.0.0
P6 : 4889dee7
P7 : 12fc
P8 : ac
P9 : system.io.filenotfoundexception
Run Code Online (Sandbox Code Playgroud)
Manged C++库基本上只是:
#using "C:\\MyCSharpAssembly.dll";
__declspec(dllexport) void callMangagedCode() {
ManagedObject ^o = nullptr;
}
Run Code Online (Sandbox Code Playgroud)
'#using'本身似乎没有引起任何问题,但是一旦我从C#DLL开始使用符号,我就会遇到问题.有人知道发生了什么吗?
这system.io.filenotfoundexception部分让我觉得有些DLL没有找到,但我不知道它在哪个或哪里.
在我的PowerBuilder应用程序中,以下代码段在运行时导致R0002错误(正在引用空对象):
Window w = windows[idx]
IF NOT IsNull( w ) THEN
MessageBox( "", "ClassName is " + w.GetClassName() ) // This line crashes
END IF
Run Code Online (Sandbox Code Playgroud)
有谁知道那是为什么?我的印象是IsNull()专门用于测试空值.