项目的新手,有多个源文件用于编译,一些"可能"是动态库,在运行时加载.使用"GDB"调试可执行文件时,是否有命令列出用于构建可执行文件的所有源文件(静态).一旦我拥有所有的源文件,我就很容易设置断点,列出函数等.我找不到在GDB中执行它的命令(我确定应该有一个).在DDD(基于gui的gdb)中,有一个Menu:File-> List,它列出了所有使用的源文件和用于构建可执行文件的静态库.不幸的是,对于基于命令行的调试器(GDB),我找不到等效的命令.
我用伪代码捕获Makefile的意图,然后指出我遇到的问题.我正在寻找一个在测试环境中更加用户友好的Makefile.Makefile的正确用法如下所示.
make CATEGORY=parser TEST=basic.
make ALL
Run Code Online (Sandbox Code Playgroud)
如果用户给出"JUST"命令,如下所示,它应该打印一条消息"CATEGORY defined TEST undefined",反之亦然
make CATEGORY=parser
make TEST=basic
Run Code Online (Sandbox Code Playgroud)
我尝试以下列方式编写Makefile,但它出错了:
help:
echo"Usage: make CATEGORY=<advanced|basic> TEST=<test-case>
echo" make ALL
ifdef CATEGORY
ifdef TEST
CATEGORY_TEST_DEFINED = 1
else
echo "TEST not defined"
else
echo "CATEGORY not defined"
endif
ifeq ($(CATEGORY_TEST_DEFINED), 1)
$(CATEGORY):
cd $(PROJ)/$(CATEGORY)
make -f test.mk $(TEST)
endif
ifdef ALL
$(ALL):
for i in `ls`
cd $$(i)
make all
endif
Run Code Online (Sandbox Code Playgroud)
我的问题是:
Makefile中的规则是否可以选择性(使用ifdef选择规则和目标).
回声不起作用.echo应该帮助用户正确使用.
伪代码:
my @unsortedArray = { ["Harry", 10], ["Tim", 8], ["Joe", 3]};
my @sortedArray = ?????
Run Code Online (Sandbox Code Playgroud)
最终sortedArray应该基于col-2(整数)进行排序,处理与"人名"(col-1)的1对1关系.最终结果应如下所示:
sortedArray should be { ["Joe", 3], ["Tim", 8], ["Harry", 10] };
Run Code Online (Sandbox Code Playgroud) #include <stdio.h>
#include <string.h>
main()
{
char tmpChar;
char *str_1 = "Hello";
int index;
int len = strlen(str_1);
for (int i = 0; i < len/2; i++)
{
index = len - 1- i;
tmpChar = str_1[len - i -1];
str_1[index] = str_1[i]; <<<<<--------------- core dumps at this point. Not sure why
str_1[i] = tmpChar;
printf("str_1[%d] = %c\n", i, str_1[i]);
}
str_1[len] = '\0';
printf("str_1 = %s\n", str_1);
}
Run Code Online (Sandbox Code Playgroud) 这是一个简单的代码,其中3个不同的函数[localStrPtr,localIntPtr,localCharPtr ]在它们各自的函数中返回指向它们的局部变量[string,integer,char]的指针.
码:
#include <stdio.h>
char* localStrPtr (char*);
int* localIntPtr (int, int);
char* localCharPtr (char);
main()
{
int *pInt;
char *pChar;
printf( "localStrPtr = %s\n", localStrPtr("abcd") );
pInt = (int*) localIntPtr(3, 5);
printf( "localIntPtr = %d\n", *pInt );
pChar = (char*) localCharPtr('y');
printf( "localCharPtr = %c\n", *pChar );
}
char* localStrPtr(char* argu)
{
char str[20];
// char* str = (char*) malloc (20);
strcpy (str, argu);
return str;
}
int* localIntPtr (int argu1, …
Run Code Online (Sandbox Code Playgroud) 假设我在P4中有文件foo.c的版本,树的顶部是foo.c#8。
由于某种原因,我想将foo.c#4移为foo.c#9(实际上是将版本4移到树的顶部)。
一种方法是手动进行(同步版本4,进行复制,然后同步到树顶,编辑并复制4,然后重新提交)。
有没有更优雅的方式将foo.c#4推到树的顶部?
我想知道可以用来从子shell更改父shell的目录的任何机制.例如,我在$ HOME中运行脚本"settings.sh".我的$ HOME有一个目录$ HOME/TEST/run.如果我的"settings.sh"脚本如下所示
#!/bin/bash
# some shell related code
# some shell related code
cd $HOME/TEST/run
exit 0
Run Code Online (Sandbox Code Playgroud)
我在$ HOME的命令提示符下执行上面的脚本.执行后,我希望我的命令提示符在目录$ HOME/TEST/run中.我明白在子shell中,它正在被cd到$ HOME/TEST/run,但是在执行结束时,它又回到了$ HOME.
使用单个脚本是否有任何优雅的方法来完成上述操作.一种方法是修改脚本"settings.sh"以生成另一个脚本,然后使用".$ HOME/generatedScript.sh"
在TCL中,是否有一个优雅的实现,它将模仿编程语言中经常使用的ifdef.从TCL脚本语言本身来看,我找不到TCL解释器原生支持的方法.