2008年11月21日 星期五

在linux下設定程式斷點

「聽說」在windows下,要設定斷點,只要在程式中加system("PAUSE");

不然的話,就必需要用IDE所提供的工具才可以去慢慢trace程式,
而我是比較習慣用vim寫程式,今天剛好找到一個可以提供讓程式先暫體的一個方法~

定義一個巨集,PAUSE

#include <stdio.h>
#define PAUSE printf("Press any key to continue..."); fgetc(stdin);


完整程式範例

#include <stdio.h>
#define PAUSE printf("Press any key to continue..."); fgetc(stdin);

int main(void)
{
  PAUSE
  printf("system(\"pause\") for Linux!\n");
  return 0;
}

程式雖然說按任何按鍵,但是,實際上只有按Enter才有效果。
我記得有一個函式是按任何按鍵就會有動作的~
下次有找到再補上吧~

噹噹~找到啦~如何在linux下實作一個getch()

在linux下沒有conio.h這一個檔案,所以,只好實作它啦~
請參考以下檔案。

debug.h

#ifndef _DEBUG_H
#define _DEBUG_H

#include <termios.h>
#include <unistd.h>
#include <assert.h>
#include <string.h>
/*------------------------------------------------*/
int getch(void) {
  int c=0;

  struct termios org_opts, new_opts;
  int res=0;
    //----- store old settings -----------
  res=tcgetattr(STDIN_FILENO, &org_opts);
  assert(res==0);
    //---- set new terminal parms --------
  memcpy(&new_opts, &org_opts, sizeof(new_opts));
  new_opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOPRT | ECHOKE | ICRNL);
  tcsetattr(STDIN_FILENO, TCSANOW, &new_opts);
  c=getchar();
    //------ restore old settings ---------
  res=tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);
  assert(res==0);
  return(c);
}
#endif // _DEBUG_H


參考資料:
#define KNOWLEDGE FREE
在 Linux 上實作 C++ 在 VC++ 的 getch()

沒有留言: