小编Mik*_*ike的帖子

GDB:如何列出用于编译的所有源文件

项目的新手,有多个源文件用于编译,一些"可能"是动态库,在运行时加载.使用"GDB"调试可执行文件时,是否有命令列出用于构建可执行文件的所有源文件(静态).一旦我拥有所有的源文件,我就很容易设置断点,列出函数等.我找不到在GDB中执行它的命令(我确定应该有一个).在DDD(基于gui的gdb)中,有一个Menu:File-> List,它列出了所有使用的源文件和用于构建可执行文件的静态库.不幸的是,对于基于命令行的调试器(GDB),我找不到等效的命令.

debugging gdb ddd-debugger

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

在makefile中使用条件规则

我用伪代码捕获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)

我的问题是:

  1. Makefile中的规则是否可以选择性(使用ifdef选择规则和目标).

  2. 回声不起作用.echo应该帮助用户正确使用.

makefile conditional-compilation

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

Perl:基于特定列对具有多个列的2D数组进行排序

伪代码:

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)

arrays perl perl-data-structures

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

Coredump在处理反转字符串的函数时

#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)

c string reverse

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

从函数返回本地var字符串失败,而local var int和char工作正常.为什么?

可能重复:
区别 - 从函数返回'local'char*与从函数返回'local'int*

这是一个简单的代码,其中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)

c c++ variables heap stack

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

Perforce(P4)将树中的特定版本移动到树的顶部

假设我在P4中有文件foo.c的版本,树的顶部是foo.c#8。

由于某种原因,我想将foo.c#4移为foo.c#9(实际上是将版本4移到树的顶部)。

一种方法是手动进行(同步版本4,进行复制,然后同步到树顶,编辑并复制4,然后重新提交)。

有没有更优雅的方式将foo.c#4推到树的顶部?

version-control perforce

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

更改父shell的目录

我想知道可以用来从子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"

bash csh tcsh sh

0
推荐指数
1
解决办法
1163
查看次数

ifdef相当于TCL

在TCL中,是否有一个优雅的实现,它将模仿编程语言中经常使用的ifdef.从TCL脚本语言本身来看,我找不到TCL解释器原生支持的方法.

bash shell tcl

0
推荐指数
1
解决办法
2145
查看次数